- DECLARE_DYNAMIC_CLASS(wxExprDatabase)
- private:
- wxNode *position; // Where we are in a search
- wxHashTable *hash_table;
- wxString attribute_to_hash;
- public:
- int noErrors;
-
- wxExprDatabase(wxExprErrorHandler handler = 0);
-
- // Use hashing on both the functor, and the attribute of
- // specified type (wxExprString or wxExprInteger) and name.
- // So to find node 45
- // (i.e. match the clause node(id=45, ...))
- // it usually requires 1 look-up: the keys for functor and attribute
- // are added together.
- // Obviously if the attribute was missing in a clause, it would
- // fail to be found by this method, but could be retrieved by a
- // linear search using BeginFind and FindClauseByFunctor,
- // or just searching through the list as per usual.
-
- wxExprDatabase(wxExprType type, const wxString& attribute, int size = 500,
- wxExprErrorHandler handler = 0);
-
- ~wxExprDatabase(void);
-
- void BeginFind(void) ; // Initialise a search
- wxExpr *FindClause(long id) ; // Find a term based on an integer id attribute
- // e.g. node(id=23, type=rectangle, ....).
-
- // Find on basis of attribute/value pairs, e.g. type=rectangle
- // This doesn't use hashing; it's a linear search.
- wxExpr *FindClause(const wxString& word, const wxString& value);
- wxExpr *FindClause(const wxString& word, long value);
- wxExpr *FindClause(const wxString& word, double value);
- wxExpr *FindClauseByFunctor(const wxString& functor);
-
- wxExpr *HashFind(const wxString& functor, const wxString& value) const;
- wxExpr *HashFind(const wxString& functor, long value) const;
-
- void Append(wxExpr *expr); // Does cleverer things if hashing is on
- void ClearDatabase(void);
- inline int GetErrorCount() const { return noErrors; }
- bool Read(const wxString& filename);
- bool ReadFromString(const wxString& buffer);
- bool Write(const wxString& fileName);
- bool Write(ostream& stream);
- void WriteLisp(ostream& stream);
-
- // Compatibility
- inline bool ReadProlog(char *filename) { return Read(wxString(filename)); }
- inline bool ReadPrologFromString(char *buffer) { return ReadFromString(wxString(buffer)); }
- inline void WriteProlog(ostream& stream) { Write(stream); }
+private:
+ wxNode *position; // Where we are in a search
+ wxHashTable *hash_table;
+ wxString attribute_to_hash;
+
+public:
+ int noErrors;
+
+ wxExprDatabase(wxExprErrorHandler handler = 0);
+
+ // Use hashing on both the functor, and the attribute of
+ // specified type (wxExprString or wxExprInteger) and name.
+ // So to find node 45
+ // (i.e. match the clause node(id=45, ...))
+ // it usually requires 1 look-up: the keys for functor and attribute
+ // are added together.
+ // Obviously if the attribute was missing in a clause, it would
+ // fail to be found by this method, but could be retrieved by a
+ // linear search using BeginFind and FindClauseByFunctor,
+ // or just searching through the list as per usual.
+
+ wxExprDatabase(wxExprType type, const wxString& attribute, int size = 500,
+ wxExprErrorHandler handler = 0);
+
+ ~wxExprDatabase(void);
+
+ void BeginFind(void) ; // Initialise a search
+ wxExpr *FindClause(long id) ; // Find a term based on an integer id attribute
+ // e.g. node(id=23, type=rectangle, ....).
+
+ // Find on basis of attribute/value pairs, e.g. type=rectangle
+ // This doesn't use hashing; it's a linear search.
+ wxExpr *FindClause(const wxString& word, const wxString& value);
+ wxExpr *FindClause(const wxString& word, long value);
+ wxExpr *FindClause(const wxString& word, double value);
+ wxExpr *FindClauseByFunctor(const wxString& functor);
+
+ wxExpr *HashFind(const wxString& functor, const wxString& value) const;
+ wxExpr *HashFind(const wxString& functor, long value) const;
+
+ void Append(wxExpr *expr); // Does cleverer things if hashing is on
+ void ClearDatabase(void);
+ inline int GetErrorCount() const { return noErrors; }
+ bool Read(const wxString& filename);
+ bool ReadFromString(const wxString& buffer);
+ bool Write(const wxString& fileName);
+ bool Write(FILE* stream);
+
+ // Compatibility
+ inline bool ReadProlog(wxChar *filename) { return Read(wxString(filename)); }
+ inline bool ReadPrologFromString(char *buffer) { return ReadFromString(wxString(buffer)); }
+ inline void WriteProlog(FILE* stream) { Write(stream); }
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxExprDatabase)