diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/nde/Field.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/nde/Field.h')
-rw-r--r-- | Src/nde/Field.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/Src/nde/Field.h b/Src/nde/Field.h new file mode 100644 index 00000000..59af32d8 --- /dev/null +++ b/Src/nde/Field.h @@ -0,0 +1,110 @@ +/* --------------------------------------------------------------------------- +Nullsoft Database Engine +-------------------- +codename: Near Death Experience +--------------------------------------------------------------------------- */ + +/* --------------------------------------------------------------------------- + +Field Class Prototypes + +--------------------------------------------------------------------------- */ + +#ifndef __FIELD_H +#define __FIELD_H + +#ifdef __ANDROID__ +#include <foundation/types.h> // TODO +#else +#include <bfc/platform/types.h> +#endif + +class Table; +#include <stdio.h> + +#define PUT_INT(y) data[pos]=(uint8_t)(y&255); data[pos+1]=(uint8_t)((y>>8)&255); data[pos+2]=(uint8_t)((y>>16)&255); data[pos+3]=(uint8_t)((y>>24)&255) +#define GET_INT() (int)(data[pos]|(data[pos+1]<<8)|(data[pos+2]<<16)|(data[pos+3]<<24)) +#define PUT_SHORT(y) data[pos]=(uint8_t)(y&255); data[pos+1]=(uint8_t)((y>>8)&255); +#define GET_SHORT() (uint16_t)(data[pos]|(data[pos+1]<<8)) +#define PUT_PINT(y) data[*pos]=(uint8_t)(y&255); data[*pos+1]=(uint8_t)((y>>8)&255); data[*pos+2]=(uint8_t)((y>>16)&255); data[*pos+3]=(uint8_t)((y>>24)&255) +extern float GET_FLOAT(const uint8_t *data, size_t pos); +extern void PUT_FLOAT(float f, uint8_t *data, size_t pos); +extern void PUT_BINARY(uint8_t *dest, const uint8_t *src, size_t size, size_t pos); +extern void GET_BINARY(uint8_t *dest, const uint8_t *src, size_t size, size_t pos); +#define PUT_CHAR(y) data[pos]=y +#define GET_CHAR() data[pos] +#define CHECK_CHAR(l) { if (l < 1) return; l--; } +#define CHECK_INT(l) { if (l < 4) return; l-=4; } +#define CHECK_INT64(l) { if (l < 8) return; l-=8; } +#define CHECK_SHORT(l) { if (l < 2) return; l-=2; } +#define CHECK_BIN(l, size) { if (l < size) return; l-=size; } + +#ifdef ASSERT +#undef ASSERT +#endif +#define ASSERT(x) { \ + if (!(x)) \ + OutputDebugString("Assertion failed "); \ +} + +#define _CHECK_CHAR(l) { ASSERT(l >= 1); l-=1; } +#define _CHECK_INT(l) { ASSERT(l >= 4); l-=4; } +#define _CHECK_SHORT(l) { ASSERT(l >= 2); l-=2; } +#define _CHECK_BIN(l, size) { ASSERT(l >= size); l-=size; } + +class Field //: public wa::lists::node_ptr +{ +public: + Field(); + virtual ~Field(); + virtual Field *Clone(Table *pTable); + unsigned char GetFieldId(void) + { + return ID; + } + int GetType(); + size_t GetTotalSize(); + Field(int FieldPos); + Field *ReadField(Table *pTable, int pos, uint32_t *next_position=0); + Field *ReadField(Table *pTable, int pos, bool readTyped, uint32_t *next_position=0); + void WriteField(Table *pTable, Field *previous_field, Field *next_field); + virtual void ReadTypedData(const uint8_t *, size_t /*len*/) { }; + virtual void WriteTypedData(uint8_t *, size_t) { }; + virtual size_t GetDataSize(void) + { + return 0; + } + virtual int Compare(Field * /*Entry*/) + { + return 0; + } + virtual int Starts(Field * /*Entry*/) + { + return 0; + } + virtual int Contains(Field * /*Entry*/) + { + return 0; + } + virtual bool ApplyFilter(Field * /*Data*/, int /*flags*/) + { + return false; + } + uint32_t GetFieldPos(void); + void InitField(void); + union + { + struct + { + uint8_t ID; + uint8_t Type; + }; + uint32_t _dummy_union_thingy; + }; +protected: + uint32_t Pos; + + uint32_t MaxSizeOnDisk; +}; + +#endif
\ No newline at end of file |