Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

PhxBitVector.h

Go to the documentation of this file.
00001 #ifndef PHX_BITVECTOR_H
00002 #define PHX_BITVECTOR_H
00003 
00004 #include <Phx/PhxConfig.h>
00005 #include <Phx/PhxTypes.h>
00006 #include <fstream>
00007 
00015 namespace Phx {
00016 
00017   class BitVector {
00018   public:
00019     typedef uint32_t Bits;
00020     typedef uint32_t Bytes;
00021     
00022     class InputFile;
00023     class OutputFile;
00024 
00025     explicit BitVector(Bits bitCount = 16); // allocates buffer to fit bitCount bits
00026     explicit BitVector(const uint8_t* buffer, Bits bitCount); // incurs copy
00027     virtual ~BitVector();
00028 
00029     // copy / assignment
00030     BitVector(const BitVector&);
00031     const BitVector& operator=(const BitVector&);
00032 
00037     uint8_t* data() { return mData; }
00038     const uint8_t* data() const { return mData; }
00039 
00049     Bits bitCount() const { return mBitCount; }
00050 
00070     void bitCount(Bits bitCount);
00071 
00080     Bytes byteCount(void) const { return (bitCount() + 7) >> 3; }
00081 
00094     Bytes dataSize(void) const { return mDataSize; }
00095 
00107     void dataSize(Bytes dataSize);
00108 
00121     Bits nextIndex(void) const { return mNextIndex; }
00122 
00129     String stringField(Bits bitIndex);
00130 
00137     double doubleField(Bits bitIndex);
00138 
00145     float floatField(Bits bitIndex);
00146 
00153     uint64_t uint64Field(Bits bitIndex);
00154 
00161     uint32_t uint32Field(Bits bitIndex);
00162 
00169     uint16_t uint16Field(Bits bitIndex);
00170 
00177     uint8_t uint8Field(Bits bitIndex);
00178 
00185     int64_t int64Field(Bits bitIndex) { return (int64_t)uint64Field(bitIndex); }
00186 
00193     int32_t int32Field(Bits bitIndex) { return (int32_t)uint32Field(bitIndex); }
00194 
00201     int16_t int16Field(Bits bitIndex) { return (int16_t)uint16Field(bitIndex); }
00202 
00209     int8_t int8Field(Bits bitIndex) { return (int8_t)uint8Field(bitIndex); }
00210 
00222     //    uint32_t uintBitsField(Bits bitIndex, Bits numBits);
00223 
00234     //    int32_t intBitsField(Bits bitIndex, Bits numBits);
00235 
00242     bool boolField(Bits bitIndex);
00243 
00266     //BitVector bitVectorField(Bits bitIndex);
00267 
00268     void stringField(Bits bitIndex, const String& value);
00269     void doubleField(Bits bitIndex, double value);
00270     void floatField(Bits bitIndex, float value);
00271     void uint64Field(Bits bitIndex, uint64_t value);
00272     void uint32Field(Bits bitIndex, uint32_t value);
00273     void uint16Field(Bits bitIndex, uint16_t value);
00274     void uint8Field(Bits bitIndex, uint8_t value);
00275     void int64Field(Bits bitIndex, int64_t value) { uint64Field(bitIndex, (uint64_t)value); }
00276     void int32Field(Bits bitIndex, int32_t value) { uint32Field(bitIndex, (uint32_t)value); }
00277     void int16Field(Bits bitIndex, int16_t value) { uint16Field(bitIndex, (uint16_t)value); }
00278     void int8Field(Bits bitIndex, int8_t value) { uint8Field(bitIndex, (uint8_t)value); }
00279     //    void uintBitsField(Bits bitIndex, Bits numBits, uint32_t value);
00280     //    void intBitsField(Bits bitIndex, Bits numBits, int32_t value);
00281     void boolField(Bits bitIndex, bool value);
00282 
00283   private:
00284     void resizeBuffer(Bits bitCount);
00285 
00286     uint8_t*           mData;
00287     Bytes              mDataSize;
00288 
00289     Bits               mBitCount;
00290     Bits               mNextIndex;
00291   };
00292 
00296   class BitVector::InputFile {
00297   public:
00307     InputFile(const String& fileName);
00308 
00312     virtual ~InputFile();
00313 
00328     BitVector newBitVector(void);
00329 
00338     uint32_t bitVectorCount(void) const { return mBitVectorCount; }
00339 
00347     uint32_t bitVectorCountMax(void) const { return mBitVectorCountMax; }
00348 
00349   private:
00350     std::ifstream mFile;
00351     uint32_t      mBitVectorCount;
00352     uint32_t      mBitVectorCountMax;
00353   };
00354 
00358   class BitVector::OutputFile {
00359   public:
00360 
00370     OutputFile(const String& fileName);
00371 
00375     virtual ~OutputFile();
00376 
00381     void newBitVector(const BitVector& bitVector);
00382 
00389     uint32_t bitVectorCount(void) const { return mBitVectorCount; }
00390 
00391   private:
00392     std::ofstream mFile;
00393     uint32_t      mBitVectorCount;
00394   };
00395 
00396 }; // namespace Phx
00397 
00398 #endif /* PHX_BITVECTOR_H */

Generated on Wed Dec 21 22:05:37 2005 for Phoenix OSFS by  doxygen 1.4.2