⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seqid.h

📁 C++ patterns设计模式
💻 H
字号:
#ifndef INCLUDED_SEQID_H
#define INCLUDED_SEQID_H

#if defined(HAS_PRAGMA_ONCE)
#pragma PRAGMA_ONCE_DECLARE
#endif

namespace acl
{
	/// no lock policy implement
	struct LockNothing
	{
		void Lock(){}
		void Unlock(){}
	};

	template<typename LockPolicy>
    class BasicSequenceGenerator
    {
    public:
        BasicSequenceGenerator(unsigned int min=MIN_ID, unsigned int max=MAX_ID)
			: m_min(min)
			, m_max(max)
        {
			if(m_min <= SELF_ID)
				m_min = SELF_ID+1; 
            m_idseq = m_min;
        }
        static unsigned int getSelf()
        {
            return SELF_ID;
        }
        static bool isSelf(unsigned int id)
        {
            return id == SELF_ID;
        }
        static unsigned int getInvalid()
        {
            return INVALID_ID;
        }
        static bool isValid(unsigned int id)
        {
            return id != INVALID_ID;
        }
        unsigned int next()
        {
            ScopeLocker<LockPolicy> scope_cs(m_cs);
            if(++m_idseq >= m_max)
                m_idseq = m_min;
            return m_idseq;
        }
    private:
        LockPolicy	 m_cs;
		unsigned int m_min;
		unsigned int m_max;
        unsigned int m_idseq;

        enum 
        {
            INVALID_ID  = 0x00000000
        };
        enum
        {
            SELF_ID     = 0x00000001
        };
        enum
        {
            MIN_ID      = 0x00001000
        };
        enum
        {
            MAX_ID      = 0x8FFFFFFF
        };
    };
	typedef BasicSequenceGenerator<CTCriticalSection> SequenceGenerator;
	typedef BasicSequenceGenerator<LockNothing> SingleThreadSequenceGenerator;
}
typedef acl::SequenceGenerator CTSequenceGenerator;
typedef acl::SingleThreadSequenceGenerator CTSingleThreadSequenceGenerator;
/************************************************************************/
/* Change Log:                                                          */
/* add lock policy to SequenceGenerator, default policy use critical section   */
/* change lock policy can make it more efficiency in single thread environment */
/************************************************************************/
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -