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/Int128Field.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/nde/Int128Field.cpp')
-rw-r--r-- | Src/nde/Int128Field.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/Src/nde/Int128Field.cpp b/Src/nde/Int128Field.cpp new file mode 100644 index 00000000..c63d1f48 --- /dev/null +++ b/Src/nde/Int128Field.cpp @@ -0,0 +1,126 @@ +/* --------------------------------------------------------------------------- + Nullsoft Database Engine + -------------------- + codename: Near Death Experience +--------------------------------------------------------------------------- */ + +/* --------------------------------------------------------------------------- + + Int128Field Class +Field data layout: +[16 bytes] value +--------------------------------------------------------------------------- */ + +#include "nde.h" +#include "Int128Field.h" +#include <time.h> + +//--------------------------------------------------------------------------- +Int128Field::Int128Field(void *data) +{ + InitField(); + Type = FIELD_INT128; + memcpy(Value, data, 16); +} + +//--------------------------------------------------------------------------- +void Int128Field::InitField(void) +{ + Type = FIELD_INT128; + memset(Value, 0, 16); +} + +//--------------------------------------------------------------------------- +Int128Field::Int128Field() +{ + InitField(); +} + +//--------------------------------------------------------------------------- +Int128Field::~Int128Field() +{ +} + +//--------------------------------------------------------------------------- +void Int128Field::ReadTypedData(const uint8_t *data, size_t len) +{ + if (len < 16) return; + memcpy(Value, data, 16); +} + +//--------------------------------------------------------------------------- +void Int128Field::WriteTypedData(uint8_t *data, size_t len) +{ + + if (len < 16) return; + memcpy(data, Value, 16); +} + +//--------------------------------------------------------------------------- +void *Int128Field::GetValue(void) +{ + return Value; +} + +//--------------------------------------------------------------------------- +void Int128Field::SetValue(const void *Val) +{ + memcpy(Value, Val, 16); +} + +//--------------------------------------------------------------------------- +size_t Int128Field::GetDataSize(void) +{ + return 16; +} + +//--------------------------------------------------------------------------- +int Int128Field::Compare(Field *Entry) +{ + if (!Entry) return -1; + return memcmp(Value, ((Int128Field*)Entry)->GetValue(), 16); +} + +static char zerobuf[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +//--------------------------------------------------------------------------- +bool Int128Field::ApplyFilter(Field *Data, int op) +{ + void *p = ((Int128Field *)Data)->GetValue(); + void *d = Value; + if (!p) + p = zerobuf; + if (!d) + d = zerobuf; + bool r; + switch (op) + { + case FILTER_EQUALS: + r = !memcmp(d, p, 16); + break; + case FILTER_CONTAINS: + r = !memcmp(d, p, 16); + break; + case FILTER_ABOVE: + r = (memcmp(d, p, 16) > 0); + break; + case FILTER_BELOW: + r = (memcmp(d, p, 16) < 0); + break; + case FILTER_BELOWOREQUAL: + r = (memcmp(d, p, 16) <= 0); + break; + case FILTER_ABOVEOREQUAL: + r = (memcmp(d, p, 16) >= 0); + break; + case FILTER_ISEMPTY: + r = !d || (!memcmp(d, zerobuf, 16)); + break; + case FILTER_ISNOTEMPTY: + r = d && (memcmp(d, zerobuf, 16)); + break; + default: + r = true; + break; + } + return r; +}
\ No newline at end of file |