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

📄 hxasvect.h

📁 linux下的一款播放器
💻 H
📖 第 1 页 / 共 2 页
字号:
    // add a new (key, value) pair    POSITION SetAt(const Key& key, const Value& newValue)    {        std::pair<Data::iterator, bool> insResult =             m_Data.insert(Data::value_type(key, newValue));        if (!insResult.second)        {            insResult.first->second = newValue;        }        else        {            DEBUG_CODE(++m_Serial;)        }        using namespace AssocVectorHelpers;        POSITION result = MakePosition(insResult.first - m_Data.begin());        DEBUG_CODE(EmbedSerialNumber(result, m_Serial);)        return result;    }    // removing existing (key, ?) pair    Iterator Erase(Iterator it)    {        DEBUG_CODE(++m_Serial;)        const UINT32 offset = it.value_ - m_Data.begin();        m_Data.erase(it.value_);        return Iterator(m_Data.begin() + offset DEBUG_CODE(DEBUG_COMMA this));    }        POSITION Remove(const Key& key)    {        DEBUG_CODE(++m_Serial;)        const UINT32 offset = m_Data.find(key) - m_Data.begin();        m_Data.erase(m_Data.begin() + offset);        using namespace AssocVectorHelpers;        POSITION result = MakePosition(offset);        DEBUG_CODE(EmbedSerialNumber(result, m_Serial);)        return result;    }        BOOL RemoveKey(const Key& key)    {        DEBUG_CODE(++m_Serial;)        UINT32 oldSize = m_Data.size();        m_Data.erase(key);        return oldSize != m_Data.size();    }        void RemoveAll()    {        DEBUG_CODE(++m_Serial;)        m_Data.clear();    }    // iterating all (key, value) pairs    POSITION GetStartPosition() const    {        if (m_Data.empty()) return 0;        POSITION result = AssocVectorHelpers::MakePosition(0);        HX_ASSERT(result != 0);        DEBUG_CODE(AssocVectorHelpers::EmbedSerialNumber(result, m_Serial));        HX_ASSERT(result != 0);            return result;    }        void GetNextAssoc(POSITION& rNextPosition, Key& rKey, Value& rValue) const    {        using namespace AssocVectorHelpers;                DEBUG_CODE(const unsigned char serial = GetSerialNumber(rNextPosition);)        HX_ASSERT(serial == m_Serial);        UINT32 offset = GetOffset(rNextPosition);        HX_ASSERT(offset < m_Data.size());        const Data::value_type& val = m_Data.begin()[offset];        rKey = val.first;        rValue = val.second;        if (++offset < m_Data.size())        {            rNextPosition = MakePosition(offset);            DEBUG_CODE(EmbedSerialNumber(rNextPosition, serial));        }        else        {            rNextPosition = 0;        }    }        Iterator Begin()    {        return Iterator(m_Data.begin() DEBUG_CODE(DEBUG_COMMA this));    }        Iterator End()    {        return Iterator(m_Data.end() DEBUG_CODE(DEBUG_COMMA this));    }    void Swap(CHXGenericAssocVect& rhs)    {        m_Data.swap(rhs.m_Data);        DEBUG_CODE(std::swap(m_Serial, rhs.m_Serial));    }// Implementationprotected:    Data m_Data;    DEBUG_CODE(unsigned char m_Serial;)public:    ~CHXGenericAssocVect()    {    }};//////////////////////////////////////////////////////////////////////////////////        CHXAssocVectStringToOb////////////////////////////////////////////////////////////////////////////////struct StringCompare : public std::binary_function<CHXString, CHXString, bool>{    char m_PreserveCase;            explicit StringCompare(char PreserveCase = TRUE) : m_PreserveCase(PreserveCase)     {    }    bool operator()(const CHXString& p1, const CHXString& p2) const    {        return (m_PreserveCase ? strcmp(p1, p2) : strcmpi(p1, p2)) < 0;    }};    class CHXAssocVectStringToOb     : public CHXGenericAssocVect<CHXString, void*, StringCompare>{    typedef CHXGenericAssocVect<CHXString, void*, StringCompare> Base;public:    CHXAssocVectStringToOb(const StringCompare& comp = StringCompare())        : Base(comp)    {    }        void SetCaseSensitive(BOOL b)    {        if (!b != !m_Data.key_comp().m_PreserveCase)        {            CHXAssocVectStringToOb(StringCompare(char(!!b))).Swap(*this);        }    }    void GetNextAssoc(POSITION& rNextPosition, CHXString& rKey, void*& rValue) const    {	Base::GetNextAssoc(rNextPosition, rKey, rValue);    }    // JE 12/11/01 - added a method which takes const char*& for key so that the    // key returned points to memory owned by the map (in the case of small CHXStrings)    // rather than being owned by the small string buffer of the CHXString& in the     // above method    void GetNextAssoc(POSITION& rNextPosition, const char*& rKey, void*& rValue) const    {        using namespace AssocVectorHelpers;                DEBUG_CODE(const unsigned char serial = GetSerialNumber(rNextPosition);)	    HX_ASSERT(serial == m_Serial);	        UINT32 offset = GetOffset(rNextPosition);        HX_ASSERT(offset < m_Data.size());        const Data::value_type& val = m_Data.begin()[offset];        rKey = val.first;        rValue = val.second;	        if (++offset < m_Data.size())        {            rNextPosition = MakePosition(offset);            DEBUG_CODE(EmbedSerialNumber(rNextPosition, serial));        }        else        {            rNextPosition = 0;        }    }};/////////////////////////////////////////////////////////////////////////////class HXEXPORT_CLASS CHXAssocVectPtrToPtr     : public CHXGenericAssocVect<void*, void*>{};////////////////////////////////////////////////////////////////////////////class CHXAssocVectStringToString    : public CHXGenericAssocVect<CHXString, CHXString>{};////////////////////////////////////////////////////////////////////////////class HXEXPORT_CLASS CHXAssocVectLongToObj    : public CHXGenericAssocVect<LONG32, void*>{};////////////////////////////////////////////////////////////////////////////class HXEXPORT_CLASS CHXAssocVectGUIDToObj    : public CHXGenericAssocVect<GUID, void*>{    typedef CHXGenericAssocVect<GUID, void*> Base;public:    void GetNextAssoc(POSITION& rNextPosition, GUID*& rpKey, void*& rValue) const    {        using namespace AssocVectorHelpers;                DEBUG_CODE(const unsigned char serial = GetSerialNumber(rNextPosition);)        HX_ASSERT(serial == m_Serial);        const UINT32 offset = GetOffset(rNextPosition);        HX_ASSERT(offset < m_Data.size());        const Data::value_type& val = m_Data.begin()[offset];        rpKey = const_cast<GUID*>(&val.first);        rValue = val.second;        rNextPosition = MakePosition(offset + 1);        DEBUG_CODE(EmbedSerialNumber(rNextPosition, serial));    }    typedef Base::Iterator BaseIterator;    class Iterator : public BaseIterator    {    public:        Iterator(CHXAssocVectGUIDToObj* pCont, POSITION pos)            : BaseIterator(pCont, pos)        {        }                Iterator(Data::iterator it DEBUG_CODE(DEBUG_COMMA CHXAssocVectGUIDToObj* pCont))            : BaseIterator(it DEBUG_CODE(DEBUG_COMMA pCont))        {        }	Iterator(const BaseIterator& iter)            : BaseIterator(iter)        {        }        GUID* get_key()        {            return &value_->first;        }    };};////////////////////////////////////////////////////////////////////////////#else // HX_CPP_BASIC_TEMPLATES#include "hxmap.h"#include "hxguidmap.h"typedef CHXMapStringToString CHXAssocVectStringToString;typedef CHXMapStringToOb CHXAssocVectStringToOb;typedef CHXMapGUIDToObj CHXAssocVectGUIDToObj;typedef CHXMapLongToObj CHXAssocVectLongToObj;typedef CHXMapPtrToPtr CHXAssocVectPtrToPtr;#endif // HX_CPP_BASIC_TEMPLATES#endif // HXASVECT_H_

⌨️ 快捷键说明

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