aboutsummaryrefslogtreecommitdiff
path: root/Src/nde/android/Scanner.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/nde/android/Scanner.h')
-rw-r--r--Src/nde/android/Scanner.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/Src/nde/android/Scanner.h b/Src/nde/android/Scanner.h
new file mode 100644
index 00000000..33a3b6d5
--- /dev/null
+++ b/Src/nde/android/Scanner.h
@@ -0,0 +1,148 @@
+/* ---------------------------------------------------------------------------
+ Nullsoft Database Engine
+ --------------------
+ codename: Near Death Experience
+ --------------------------------------------------------------------------- */
+
+/* ---------------------------------------------------------------------------
+
+ Scanner Class Prototypes
+
+ Android (linux) implementation
+
+ --------------------------------------------------------------------------- */
+
+#ifndef __SCANNER_H
+#define __SCANNER_H
+
+#include "../nde.h"
+#include "record.h"
+#include "../index.h"
+#include <nu/Vector.h>
+#include <nu/ValueSet.h>
+#include "../LinkedList.h"
+class Table;
+class Index;
+
+class Scanner : public LinkedListEntry
+{
+public:
+ Record *GetRecord(int Idx);
+ Scanner(Table *parentTable);
+ void IndexModified(void);
+ Index *GetIndex() { return index; }
+ Index *index; // TODO: make protected
+protected:
+
+ ~Scanner();
+
+ Table *pTable;
+ bool iModified;
+ typedef Vector<StringField *> SearchStrings;
+ SearchStrings search_strings;
+ typedef ValueSet<unsigned char> SearchFields;
+ SearchFields search_fields;
+ bool search_any;
+
+ void GetCurrentRecord(void);
+ bool MatchFilters(void);
+ bool MatchSearches();
+ bool MatchSearch(const SearchFields &fields, StringField *search_field);
+ //BOOL MatchJoins(void);
+ bool CheckFilters(void);
+ void CacheLastLocate(int Id, int From, Field *field, Index *i, int j);
+
+ static int Query_LookupToken(const char *token);
+ void Query_CleanUp(void);
+ void Query_SyntaxError(int c);
+public:
+ static int Query_GetNextToken(const char *p, int *size, char **token, int tokentable=0);
+ static const char *Query_EatSpace(const char *p);
+ static char *Query_ProbeSpace(char *p);
+ static const char *Query_ProbeNonAlphaNum(const char *p);
+ static char *Query_ProbeAlphaNum(char *p);
+ static int Query_isControlChar(char p);
+
+ bool Query(const char *query);
+ bool Query_Parse(const char *query);
+
+ const char *GetLastQuery();
+
+public://fucko: protected
+ LinkedList pstack;
+ char *token;
+ char *last_query;
+ int last_query_failed;
+
+protected:
+ Record *CurrentRecord;
+ int CurrentRecordIdx;
+ LinkedList FilterList;
+ Index *lastLocateIndex;
+ int lastLocateIdx;
+ Field *lastLocateFieldClone;
+ int lastLocateFrom;
+ int lastLocateId;
+ bool Edition;
+ int ResultPtr;
+ bool FiltersOK;
+
+public:
+ bool MatchFilter(Filter *filter);
+ typedef bool (*FilterWalker)(Scanner *scanner, Filter *filter, void *context);
+ void WalkFilters(FilterWalker walker, void *context);
+
+ ColumnField *GetColumnByName(const char *FieldName);
+ ColumnField *GetColumnById(unsigned char id);
+
+ Field *NewFieldByName(const char *fieldName, unsigned char Perm);
+ Field *NewFieldById(unsigned char Id, unsigned char Perm);
+ void DeleteField(Field *field);
+ void DeleteFieldByName(const char *name);
+ void DeleteFieldById(unsigned char Id);
+
+ void Cancel(void);
+ void Insert(void);
+ void Edit(void);
+ void Post(void);
+ void Delete(void);
+
+ Field *GetFieldByName(const char *FieldName);
+ Field *GetFieldById(unsigned char Id);
+
+ void First(int *killswitch=0);
+ void Last(int *killswitch=0);
+ int Next(int *killswitch=0);
+ int Previous(int *killswitch=0);
+ bool Eof(void);
+ bool Bof(void);
+ void New(void);
+ int GetRecordsCount(void);
+ void GetRecordById(int Id, bool checkFilters=true);
+ int GetRecordId(void);
+ void Sync(void);
+ bool LocateByName(const char *column, int From, Field *field, int *nskip=NULL);
+ bool LocateById(int Id, int From, Field *field, int *nskip=NULL);
+ bool LocateByIdEx(int Id, int From, Field *field, int *nskip, int comp_mode);
+
+ // Filters
+ int AddFilterByName(const char *name, Field *Data, unsigned char Op);
+ int AddFilterById(unsigned char Id, Field *Data, unsigned char Op);
+ int AddFilterOp(unsigned char Op);
+ void RemoveFilters(void);
+ Filter *GetLastFilter(void);
+
+ bool SetWorkingIndexByName(const char *desc);
+ bool SetWorkingIndexById(unsigned char Id);
+
+ void Search(const char *search_string);
+ bool HasIndexChanged(void) { return iModified; }
+ void ClearDirtyBit(void);
+ float FragmentationLevel(void);
+
+ Table *GetTable();
+ int in_query_parser;
+ int disable_date_resolution;
+};
+
+#endif