aboutsummaryrefslogtreecommitdiff
path: root/Src/nde/win/Binary32Field.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/nde/win/Binary32Field.cpp')
-rw-r--r--Src/nde/win/Binary32Field.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/Src/nde/win/Binary32Field.cpp b/Src/nde/win/Binary32Field.cpp
new file mode 100644
index 00000000..507682b1
--- /dev/null
+++ b/Src/nde/win/Binary32Field.cpp
@@ -0,0 +1,77 @@
+/* ---------------------------------------------------------------------------
+ Nullsoft Database Engine
+ --------------------
+ codename: Near Death Experience
+--------------------------------------------------------------------------- */
+
+/* ---------------------------------------------------------------------------
+
+ Binary32Field Class
+Field data layout:
+[4 bytes] length
+[length bytes] binary data
+--------------------------------------------------------------------------- */
+
+#include "../nde.h"
+#include "Binary32Field.h"
+#include "../ndestring.h"
+//---------------------------------------------------------------------------
+Binary32Field::Binary32Field(const uint8_t *_Data, size_t len) : BinaryField(_Data, (int)len)
+{
+ InitField();
+}
+
+//---------------------------------------------------------------------------
+void Binary32Field::InitField(void)
+{
+ Type = FIELD_BINARY32;
+}
+
+//---------------------------------------------------------------------------
+Binary32Field::Binary32Field()
+{
+ InitField();
+}
+
+//---------------------------------------------------------------------------
+void Binary32Field::ReadTypedData(const uint8_t *data, size_t len)
+{
+ size_t pos = 0;
+ CHECK_INT(len); //len-=4;
+ uint32_t c = GET_INT(); pos += 4;
+ if (c && c<=len)
+ {
+ Size = c;
+ ndestring_release((wchar_t *)Data);
+ Data = (uint8_t *)ndestring_malloc(c);
+ GET_BINARY(Data, data, c, pos);
+ }
+}
+
+//---------------------------------------------------------------------------
+void Binary32Field::WriteTypedData(uint8_t *data, size_t len)
+{
+ uint32_t c;
+ size_t pos = 0;
+
+ CHECK_INT(len); //len-=4;
+
+ if (Data && Size<=len)
+ {
+ c = (uint32_t)Size;
+ PUT_INT(c); pos += 4;
+ if (Data)
+ PUT_BINARY(data, (unsigned char*)Data, c, pos);
+ }
+ else
+ {
+ PUT_INT(0);
+ }
+}
+
+//---------------------------------------------------------------------------
+size_t Binary32Field::GetDataSize(void)
+{
+ if (!Data) return 4;
+ return Size + 4;
+} \ No newline at end of file