123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /* ---------------------------------------------------------------------------
- Nullsoft Database Engine
- --------------------
- codename: Near Death Experience
- --------------------------------------------------------------------------- */
- /* ---------------------------------------------------------------------------
- IndexField Class
- --------------------------------------------------------------------------- */
- #include "nde.h"
- //---------------------------------------------------------------------------
- IndexField::IndexField(unsigned char id, int Pos, int type, CFStringRef FieldName)
- {
- InitField();
- Type = FIELD_INDEX;
- Name = (CFStringRef)CFRetain(FieldName);
- ID = id;
- Position = Pos;
- DataType = type;
- }
- //---------------------------------------------------------------------------
- void IndexField::InitField(void)
- {
- index = 0;
- Type = FIELD_INDEX;
- Name = NULL;
- ID = 0;
- Position = -1;
- DataType = FIELD_UNKNOWN;
- }
- //---------------------------------------------------------------------------
- IndexField::IndexField()
- {
- InitField();
- }
- //---------------------------------------------------------------------------
- IndexField::~IndexField()
- {
- if (Name)
- CFRelease(Name);
- delete index;
- }
- //---------------------------------------------------------------------------
- void IndexField::ReadTypedData(const uint8_t *data, size_t len)
- {
- unsigned char c;
- int pos=0;
- CHECK_INT(len);
- Position = GET_INT(); pos += 4;
- CHECK_INT(len);
- DataType = GET_INT(); pos += 4;
- CHECK_CHAR(len);
- c = GET_CHAR(); pos++;
- if (c)
- {
- CHECK_BIN(len, c);
- if (Name)
- CFRelease(Name);
- Name = CFStringCreateWithBytes(kCFAllocatorDefault, data+pos, c, kCFStringEncodingUTF8, false);
- }
- }
- //---------------------------------------------------------------------------
- void IndexField::WriteTypedData(uint8_t *data, size_t len)
- {
- int pos=0;
- CHECK_INT(len);
- PUT_INT(Position); pos += 4;
- CHECK_INT(len);
- PUT_INT(DataType); pos += 4;
- CHECK_CHAR(len);
-
- if (Name)
- {
- CFIndex lengthRequired=0;
- CFStringGetBytes(Name, CFRangeMake(0, CFStringGetLength(Name)), kCFStringEncodingUTF8, 0, false, NULL, 0, &lengthRequired);
- CHECK_BIN(len, lengthRequired+1);
- PUT_CHAR(lengthRequired); pos++;
-
- CFStringGetBytes(Name, CFRangeMake(0, CFStringGetLength(Name)), kCFStringEncodingUTF8, 0, false, data+pos, lengthRequired, 0);
- }
- }
- //---------------------------------------------------------------------------
- CFStringRef IndexField::GetIndexName(void)
- {
- return Name;
- }
- //---------------------------------------------------------------------------
- size_t IndexField::GetDataSize(void)
- {
- if (Name)
- {
- CFIndex lengthRequired=0;
- CFStringGetBytes(Name, CFRangeMake(0, CFStringGetLength(Name)), kCFStringEncodingUTF8, 0, false, NULL, 0, &lengthRequired);
- return lengthRequired+9;
- }
- else
- return 9;
- }
- //---------------------------------------------------------------------------
- int IndexField::Compare(Field * /*Entry*/)
- {
- return 0;
- }
- //---------------------------------------------------------------------------
- int IndexField::TranslateToIndex(int Id, IndexField *toindex)
- {
- if (index && toindex && toindex->index)
- return index->TranslateIndex(Id, toindex->index);
- return -1;
- }
|