aboutsummaryrefslogtreecommitdiff
path: root/Src/nde/osx/ColumnField.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/nde/osx/ColumnField.cpp')
-rw-r--r--Src/nde/osx/ColumnField.cpp160
1 files changed, 160 insertions, 0 deletions
diff --git a/Src/nde/osx/ColumnField.cpp b/Src/nde/osx/ColumnField.cpp
new file mode 100644
index 00000000..8c1b263d
--- /dev/null
+++ b/Src/nde/osx/ColumnField.cpp
@@ -0,0 +1,160 @@
+/* ---------------------------------------------------------------------------
+Nullsoft Database Engine
+--------------------
+codename: Near Death Experience
+--------------------------------------------------------------------------- */
+
+/* ---------------------------------------------------------------------------
+
+ColumnField Class
+Mac OS X implementation
+
+Field data layout:
+[1 byte] Field Type
+[1 byte] Unused (maybe convert to 'searchable')
+[1 byte] Name Length
+[Name Length bytes] Name (UTF-8)
+--------------------------------------------------------------------------- */
+
+#include "../nde.h"
+
+//---------------------------------------------------------------------------
+ColumnField::ColumnField(unsigned char FieldID, CFStringRef FieldName, unsigned char FieldType, Table *parentTable)
+{
+ InitField();
+ Type = FIELD_COLUMN;
+ MyType = FieldType;
+ Name = (CFStringRef)CFRetain(FieldName);
+ ID = FieldID;
+}
+
+//---------------------------------------------------------------------------
+void ColumnField::InitField(void)
+{
+ searchable = false;
+ MyType = FIELD_UNKNOWN;
+ Type = FIELD_COLUMN;
+ Name = NULL;
+ ID = 0;
+}
+
+//---------------------------------------------------------------------------
+ColumnField::ColumnField()
+{
+ InitField();
+}
+
+//---------------------------------------------------------------------------
+ColumnField::~ColumnField()
+{
+ if (Name)
+ CFRelease(Name);
+}
+
+void ColumnField::SetSearchable(bool val)
+{
+ searchable=val;
+}
+
+bool ColumnField::IsSearchableField() const
+{
+ return searchable;
+}
+
+//---------------------------------------------------------------------------
+void ColumnField::ReadTypedData(const uint8_t *data, size_t len)
+{
+ unsigned char c;
+ int pos=0;
+
+ CHECK_CHAR(len);
+ MyType = GET_CHAR(); pos++;
+
+ CHECK_CHAR(len);
+ pos++;
+
+ 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 ColumnField::WriteTypedData(uint8_t *data, size_t len)
+{
+ int pos = 0;
+
+ CHECK_CHAR(len);
+ PUT_CHAR(MyType); pos++;
+
+ CHECK_CHAR(len);
+ PUT_CHAR(0/*(char)indexUnique*/);
+ pos++;
+
+ 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);
+ }
+ else
+ {
+ PUT_CHAR(0);
+ }
+}
+
+//---------------------------------------------------------------------------
+unsigned char ColumnField::GetDataType(void)
+{
+ return MyType;
+}
+
+//---------------------------------------------------------------------------
+void ColumnField::SetDataType(unsigned char type)
+{
+ if ((MyType == FIELD_INTEGER || MyType == FIELD_BOOLEAN || MyType == FIELD_DATETIME || MyType == FIELD_LENGTH) &&
+ (type == FIELD_INTEGER || type == FIELD_BOOLEAN || type == FIELD_DATETIME || type == FIELD_LENGTH)) {
+ MyType = type;
+ }
+ // going from string to filename or filename to string is OK
+ if ((MyType == FIELD_FILENAME && type == FIELD_STRING)
+ || (MyType == FIELD_STRING && type == FIELD_FILENAME))
+ {
+ MyType = type;
+ }
+}
+
+//---------------------------------------------------------------------------
+CFStringRef ColumnField::GetFieldName(void)
+{
+ return Name;
+}
+
+//---------------------------------------------------------------------------
+size_t ColumnField::GetDataSize(void)
+{
+ if (Name)
+ {
+ CFIndex lengthRequired=0;
+ CFStringGetBytes(Name, CFRangeMake(0, CFStringGetLength(Name)), kCFStringEncodingUTF8, 0, false, NULL, 0, &lengthRequired);
+ return lengthRequired+3;
+ }
+ else
+ return 3;
+}
+
+//---------------------------------------------------------------------------
+int ColumnField::Compare(Field * /*Entry*/)
+{
+ return 0;
+}
+
+