⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wxexpr.h

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        wxexpr.h// Purpose:     Prolog-like file I/O, used by resource system.// Author:      Julian Smart// Modified by:// Created:     01/02/97// RCS-ID:      $Id: wxexpr.h,v 1.5 2005/09/23 12:46:52 MR Exp $// Copyright:   (c) Julian Smart// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////#ifndef _WX_WXEXPRH__#define _WX_WXEXPRH__#include "wx/deprecated/setup.h"#if wxUSE_PROLOGIO#include "wx/defs.h"#include "wx/string.h"#include "wx/list.h"#include "wx/hash.h"#include "wx/deprecated/expr.h"#include <stdio.h>// Compatibility#define PrologExpr wxExpr#define PrologDatabase wxExprDatabase#define proioErrorHandler wxExprErrorHandler#define PROIO_ERROR_GENERAL 1#define PROIO_ERROR_SYNTAX  2#define PrologNull wxExprNull#define PrologInteger wxExprInteger#define PrologReal wxExprReal#define PrologWord wxExprWord#define PrologString wxExprString#define PrologList wxExprList#define PrologType wxExprType// Error types#define WXEXPR_ERROR_GENERAL 1#define WXEXPR_ERROR_SYNTAX  2// Error handler function definition. If app returns true,// carry on processing.typedef bool (*wxExprErrorHandler) (int errorType, char *msg);WXDLLIMPEXP_DATA_DEPRECATED(extern wxExprErrorHandler) currentwxExprErrorHandler;typedef enum {    wxExprNull,    wxExprInteger,    wxExprReal,    wxExprWord,    wxExprString,    wxExprList} wxExprType;class WXDLLIMPEXP_DEPRECATED wxExprDatabase;class WXDLLIMPEXP_DEPRECATED wxExpr{ public:  wxObject *client_data;  wxExprType type;  union {    long integer;    wxChar *word;    wxChar *string;    double real;    wxExpr *first;  // If is a list expr, points to the first node    } value;  wxExpr *next;     // If this is a node in a list, points to the next node  wxExpr *last;     // If is a list expr, points to the last node  wxExpr(wxExprType the_type, wxChar *word_or_string, bool allocate);  wxExpr(const wxString& functor);      // Assume this is a new clause - pass functor  wxExpr(wxExprType the_type, const wxString& word_or_string = wxT(""));  wxExpr(long the_integer);  wxExpr(double the_real);  wxExpr(wxList *the_list);  ~wxExpr(void);  inline wxExprType Type(void) const { return type; }  inline long IntegerValue(void) const  {    if (type == wxExprInteger)      return value.integer;    else if (type == wxExprReal)      return (long)value.real;    else return 0;  }  inline double RealValue(void) const {    if (type == wxExprReal)      return value.real;    else if (type == wxExprInteger)      return (double)value.integer;    else return (double)0.0;  }  inline wxString WordValue(void) const {    if (type == wxExprWord)      return value.word;    else if (type == wxExprString)      return wxString(value.string);    else return wxString(wxT(""));  }  inline wxString StringValue(void) const {    if (type == wxExprString)      return wxString(value.string);    else if (type == wxExprWord)      return wxString(value.word);    else return wxString(wxT(""));  }  // Get nth arg of clause (starting from 1)  wxExpr *Arg(wxExprType type, int arg) const;  // Return nth argument of a list expression (starting from zero)  wxExpr *Nth(int arg) const;  // Returns the number of elements in a list expression  int Number(void) const;  // Make a clone  wxExpr *Copy(void) const;  wxExpr *GetAttributeValueNode(const wxString& word) const;  // Use only for a clause or list  wxExpr *AttributeValue(const wxString& word) const;  // Use only for a clause  wxString Functor(void) const;                     // Only for a clause  bool IsFunctor(const wxString& s) const;                     // Only for a clause  void WriteClause(FILE* stream);  // Write this expression as a top-level clause  void WriteExpr(FILE* stream);    // Write as any other subexpression  // Append an expression to a list  void Append(wxExpr *expr);  // Insert at beginning of list  void Insert(wxExpr *expr);  // Get first expr in list  inline wxExpr *GetFirst(void) const { return ((type == wxExprList) ? value.first : (wxExpr*)NULL); }  // Get next expr if this is a node in a list  inline wxExpr *GetNext(void) const { return next; }  // Get last expr in list  inline wxExpr *GetLast(void) const { return ((type == wxExprList) ? last : (wxExpr*)NULL); }  // This should really be called SetAttributeValue since any existing  // attribute-value is deleted first.  void AddAttributeValue(const wxString& attribute, long value);  void AddAttributeValue(const wxString& attribute, double value);  void AddAttributeValueWord(const wxString& attribute, const wxString& value);  void AddAttributeValueString(const wxString& attribute, const wxString& value);  void AddAttributeValue(const wxString& attribute, wxList *value);  void AddAttributeValue(const wxString& attribute, wxExpr *value);  void AddAttributeValueStringList(const wxString& attribute, wxList *string_list);  void DeleteAttributeValue(const wxString& attribute);  bool GetAttributeValue(const wxString& att, int& var) const;  bool GetAttributeValue(const wxString& att, long& var) const;  bool GetAttributeValue(const wxString& att, float& var) const;  bool GetAttributeValue(const wxString& att, double& var) const;  bool GetAttributeValue(const wxString& att, wxString& var) const;  // Word OR string -> string  bool GetAttributeValue(const wxString& att, wxExpr **var) const;  // Compatibility with old PrologIO  inline void AssignAttributeValue(wxChar *att, int *var) const { GetAttributeValue(att, *var); }  inline void AssignAttributeValue(wxChar *att, long *var) const { GetAttributeValue(att, *var); }  inline void AssignAttributeValue(wxChar *att, float *var) const { GetAttributeValue(att, *var); }  inline void AssignAttributeValue(wxChar *att, double *var) const { GetAttributeValue(att, *var); }  inline void AssignAttributeValue(wxChar *att, wxExpr **var) const { GetAttributeValue(att, var); }  void AssignAttributeValue(wxChar *att, wxChar **var) const ;  // Word OR string -> string  // Add string items to list if the list attribute exists  bool GetAttributeValueStringList(const wxString& att, wxList *var) const;  // Associate other data with this expression, e.g. when reading in a  // number of linked items - store C++ object pointer with the expression  // so we can index into the wxExpr database and fish out the pointer.  inline void SetClientData(wxObject *data) { client_data = data; }  inline wxObject *GetClientData(void) const { return client_data; }    DECLARE_NO_COPY_CLASS(wxExpr)};class WXDLLIMPEXP_DEPRECATED wxExprDatabase: public wxList{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, wxConvLibc));    }    inline void WriteProlog(FILE* stream) { Write(stream); }private:    DECLARE_DYNAMIC_CLASS(wxExprDatabase)    DECLARE_NO_COPY_CLASS(wxExprDatabase)};// Function call-style interface - some more convenience wrappers/unwrappers// Make a callWXDLLIMPEXP_DEPRECATED wxExpr* wxExprMakeCall(const wxString& functor ...);#define wxExprMakeInteger(x) (new wxExpr((long)x))#define wxExprMakeReal(x) (new wxExpr((double)x))#define wxExprMakeString(x) (new wxExpr(wxExprString, x))#define wxExprMakeWord(x)   (new wxExpr(wxExprWord, x))#define wxExprMake(x)       (new wxExpr(x))// Checks functorWXDLLIMPEXP_DEPRECATED bool wxExprIsFunctor(wxExpr *expr, const wxString& functor);// Temporary variable for communicating between wxexpr.cpp and YACC/LEXWXDLLIMPEXP_DATA_DEPRECATED(extern wxExprDatabase*) thewxExprDatabase;// YACC/LEX can leave memory lying around...extern "C" WXDLLIMPEXP_DEPRECATED int wxExprCleanUp();#endif // wxUSE_PROLOGIO#endif // _WX_WXEXPRH__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -