Mercurial > LightClone
view LightClone/Source/FixedString.h @ 40:00d17d8f407d
Hookup game over dialog; Remove Code class
author | koryspansel |
---|---|
date | Thu, 22 Sep 2011 10:21:14 -0700 |
parents | 3a63df04f3c0 |
children | bc8afcf7e1ec |
line wrap: on
line source
/* * FixedString */ #ifndef __FIXEDSTRING_H__ #define __FIXEDSTRING_H__ #include "Types.h" #include <string.h> /* * FixedString */ template<uint32 Size = 64> class FixedString { public: /* * MaximumLength */ static const uint32 MaximumLength = Size; /* * Hash */ struct Hash { /* * operator() */ uint32 operator()(const FixedString& kString) { uint32 nHash = 5381; const char* pString = (const char*)kString; while(*pString) { nHash = ((nHash << 5) + nHash) + *pString++; } return nHash; } }; private: /* * kString */ char kString[Size]; /* * nLength */ uint32 nLength; public: /* * FixedString */ FixedString() : nLength(0) { memset(kString, 0, sizeof(kString)); } /* * FixedString */ FixedString(const char* pValue) : nLength(0) { while(*pValue) { kString[nLength++] = *pValue++; } kString[nLength] = 0; } /* * FixedString */ FixedString(const FixedString& kOther) : nLength(kOther.nLength) { for(uint32 i = 0 ; i < kOther.nLength; ++i) { kString[i] = kOther.kString[i]; } kString[nLength] = 0; } /* * operator = */ const FixedString& operator =(const FixedString& kOther) { nLength = kOther.nLength; for(uint32 i = 0 ; i < kOther.nLength; ++i) { kString[i] = kOther.kString[i]; } kString[nLength] = 0; return *this; } /* * Length */ uint32 Length() const { return nLength; } /* * operator char* */ operator char*() { return kString; } /* * operator const char* */ operator const char*() const { return kString; } }; /* * operator == */ template<uint32 Size> bool operator ==(const FixedString<Size>& kStringA, const FixedString<Size>& kStringB) { return kStringA.Length() == kStringB.Length() && strcmp(kStringA, kStringB) == 0; } /* * operator != */ template<uint32 Size> bool operator !=(const FixedString<Size>& kStringA, const FixedString<Size>& kStringB) { return kStringA.Length() != kStringB.Length() || strcmp(kStringA, kStringB) != 0; } #endif //__FIXEDSTRING_H__