Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
175
Src/nde/android/ColumnField.cpp
Normal file
175
Src/nde/android/ColumnField.cpp
Normal file
|
@ -0,0 +1,175 @@
|
|||
/* ---------------------------------------------------------------------------
|
||||
Nullsoft Database Engine
|
||||
--------------------
|
||||
codename: Near Death Experience
|
||||
--------------------------------------------------------------------------- */
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
|
||||
ColumnField Class
|
||||
Android (linux) 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 "ColumnField.h"
|
||||
#include "../NDEString.h"
|
||||
#include "../nde.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
ColumnField::ColumnField(unsigned char FieldID, const char *FieldName, unsigned char FieldType, Table *parentTable)
|
||||
{
|
||||
InitField();
|
||||
Type = FIELD_COLUMN;
|
||||
MyType = FieldType;
|
||||
Name = ndestring_wcsdup(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) free(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;
|
||||
|
||||
// [1 byte] Field Type
|
||||
CHECK_CHAR(len);
|
||||
MyType = GET_CHAR();
|
||||
pos++;
|
||||
|
||||
// [1 byte] unused
|
||||
CHECK_CHAR(len);
|
||||
//cut: indexUnique = (BOOL)GET_CHAR();
|
||||
pos++;
|
||||
|
||||
// [1 byte] string length
|
||||
CHECK_CHAR(len);
|
||||
c = GET_CHAR();
|
||||
pos++;
|
||||
|
||||
if (c)
|
||||
{
|
||||
CHECK_BIN(len, c);
|
||||
Name = ndestring_wcsndup((const char *)(data+pos), c);
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
void ColumnField::WriteTypedData(uint8_t *data, size_t len)
|
||||
{
|
||||
int pos = 0;
|
||||
|
||||
// [1 byte] Field Type
|
||||
CHECK_CHAR(len);
|
||||
PUT_CHAR(MyType);
|
||||
pos++;
|
||||
|
||||
// [1 byte] unused
|
||||
CHECK_CHAR(len);
|
||||
PUT_CHAR(0/*(char)indexUnique*/);
|
||||
pos++;
|
||||
|
||||
CHECK_CHAR(len);
|
||||
if (Name)
|
||||
{
|
||||
int string_length = strlen(Name);
|
||||
if (string_length)
|
||||
{
|
||||
PUT_CHAR(string_length);
|
||||
pos++;
|
||||
|
||||
CHECK_BIN(len, string_length);
|
||||
PUT_BINARY(data, (const uint8_t *)Name, string_length, pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
PUT_CHAR(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;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
char *ColumnField::GetFieldName(void)
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
size_t ColumnField::GetDataSize(void)
|
||||
{
|
||||
size_t s=3;
|
||||
if (Name)
|
||||
{
|
||||
s+=strlen(Name);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
int ColumnField::Compare(Field * /*Entry*/)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue