//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd. // = FileName : TBitTable.h // = Version : ver2.0 // = Author : xlc // = CreateDate : 2002-09-09 // = Description: 类的声明,位数组,以位或位单元的模式来进行数据读写和内存分配,用于大规模控制矩阵 // = Maintainers: // //-----------------------------------------------------------------------------+ #ifndef _TBITTABLE_H_ #define _TBITTABLE_H_ class GEOAPI TBitTable { public: TBitTable(long unitNum, long unitSize = 1); TBitTable(void* p, long byteSize, bool bClient = true); TBitTable& operator = (const TBitTable& bTable); void Attach(long byteSize, char *p); char* Detach(); ~TBitTable(); //位数转字节数 static long BitToByte(long bitNum); bool IsValidIndex(long i) const; long GetLength() const; long GetByteSize() const; long GetBitSize() const; void SetUnitSize(long size); long GetUnitSize() const; //新单元数 void Realloc(long unitNum); //bit read/write,使用位索引,非单元索引! bool operator[](long i); void Set(long i); void Reset(long i); //unit read/write //取单元值 long GetValue(long i) const; //单元赋值 void SetValue(long i,char value); void SetAll(char value); void SetAll(); void Reset(); //data transfer operator char() const; operator int() const; operator float() const; operator double() const; operator const char*() const; operator const int*() const; operator const float*() const; operator const double*() const; protected: //位定位 void BitToByte(long i, long& byteIndex,long& bitIndex) const; //单元定位 void UnitToByte(long i, long& byteIndex,long& bitIndex) const; protected: long length; //unit num long unit; //unit length; 仅支持1,2,4 char *pData; bool bOwner; //是否数据代理 }; #endif