📄 ptypes.h
字号:
class ptpublic variant{ friend class string; friend class _varray;protected: int tag; // VAR_XXX union { large i; // 64-bit int value bool b; // bool value double f; // double value char* s; // string object; can't declare as string because of the union _varray* a; // pointer to a reference-counted _strlist object component* o; // pointer to a reference-counted component object (or derivative) } value; // we need this name to be able to copy the entire union in some situations void initialize() { tag = VAR_NULL; } void initialize(large v) { tag = VAR_INT; value.i = v; } void initialize(bool v) { tag = VAR_BOOL; value.b = v; } void initialize(double v) { tag = VAR_FLOAT; value.f = v; } void initialize(const char* v) { tag = VAR_STRING; PTYPES_NAMESPACE::initialize(PTR_TO_STRING(value.s), v); } void initialize(const string& v) { tag = VAR_STRING; PTYPES_NAMESPACE::initialize(PTR_TO_STRING(value.s), v); } void initialize(_varray* a); void initialize(component* o); void initialize(const variant& v); void finalize(); void assign(large); void assign(bool); void assign(double); void assign(const char*); void assign(const string&); void assign(_varray*); void assign(component*); void assign(const variant&); bool equal(const variant& v) const; variant(_varray* a) { initialize(a); }public: // construction variant() { initialize(); } variant(int v) { initialize(large(v)); } variant(unsigned int v) { initialize(large(v)); } variant(large v) { initialize(v); } variant(bool v) { initialize(v); } variant(double v) { initialize(v); } variant(const char* v) { initialize(v); } variant(const string& v) { initialize(v); } variant(component* v) { initialize(v); } variant(const variant& v) { initialize(v); } ~variant() { finalize(); } // assignment variant& operator= (int v) { assign(large(v)); return *this; } variant& operator= (unsigned int v) { assign(large(v)); return *this; } variant& operator= (large v) { assign(v); return *this; } variant& operator= (bool v) { assign(v); return *this; } variant& operator= (double v) { assign(v); return *this; } variant& operator= (const char* v) { assign(v); return *this; } variant& operator= (const string& v) { assign(v); return *this; } variant& operator= (component* v) { assign(v); return *this; } variant& operator= (const variant& v) { assign(v); return *this; } // typecast operator int() const; operator unsigned int() const; operator long() const; operator unsigned long() const; operator large() const; operator bool() const; operator double() const; operator string() const; operator component*() const; // comparison bool operator== (const variant& v) const { return equal(v); } bool operator!= (const variant& v) const { return !equal(v); } // typification ptpublic friend void ptdecl clear(variant&); friend int vartype(const variant& v); friend bool isnull(const variant& v); friend bool isint(const variant& v); friend bool isbool(const variant& v); friend bool isfloat(const variant& v); friend bool isstring(const variant& v); friend bool isarray(const variant& v); friend bool isobject(const variant& v); friend bool iscompound(const variant& v); // array manipulation ptpublic friend void ptdecl aclear(variant&); ptpublic friend variant ptdecl aclone(const variant&); ptpublic friend const variant& ptdecl get(const variant&, const string& key); ptpublic friend const variant& ptdecl get(const variant&, large key); ptpublic friend void ptdecl put(variant&, const string& key, const variant& item); ptpublic friend void ptdecl put(variant&, large key, const variant& item); ptpublic friend void ptdecl del(variant&, const string& key); ptpublic friend void ptdecl del(variant&, large key); // indexed access to arrays ptpublic friend int ptdecl alength(const variant&); ptpublic friend void ptdecl apack(variant&); ptpublic friend bool ptdecl anext(const variant& a, int&, variant& item); ptpublic friend bool ptdecl anext(const variant& a, int&, variant& item, string& key); ptpublic friend int ptdecl aadd(variant&, const variant& item); ptpublic friend void ptdecl aput(variant&, int index, const variant& item); ptpublic friend void ptdecl ains(variant&, int index, const variant& item); ptpublic friend void ptdecl adel(variant&, int index); ptpublic friend const variant& ptdecl aget(const variant&, int index); ptpublic friend string ptdecl akey(const variant&, int index); const variant& operator[](const char* key) const { return get(*this, string(key)); } const variant& operator[](const string& key) const { return get(*this, key); } const variant& operator[](large key) const { return get(*this, key); } // 'manual' initialization/finalization, undocumented. use with care! friend void initialize(variant& v); friend void initialize(variant& v, large i); friend void initialize(variant& v, int i); friend void initialize(variant& v, unsigned int i); friend void initialize(variant& v, bool i); friend void initialize(variant& v, double i); friend void initialize(variant& v, const char* i); friend void initialize(variant& v, const string& i); friend void initialize(variant& v, component* i); friend void initialize(variant& v, const variant& i); friend void finalize(variant& v);};typedef variant* pvariant;inline int vartype(const variant& v) { return v.tag; }inline bool isnull(const variant& v) { return v.tag == VAR_NULL; }inline bool isint(const variant& v) { return v.tag == VAR_INT; }inline bool isbool(const variant& v) { return v.tag == VAR_BOOL; }inline bool isfloat(const variant& v) { return v.tag == VAR_FLOAT; }inline bool isstring(const variant& v) { return v.tag == VAR_STRING; }inline bool isarray(const variant& v) { return v.tag == VAR_ARRAY; }inline bool isobject(const variant& v) { return v.tag == VAR_OBJECT; }inline bool iscompound(const variant& v) { return v.tag >= VAR_COMPOUND; }inline void initialize(variant& v) { v.initialize(); }inline void initialize(variant& v, large i) { v.initialize(i); }inline void initialize(variant& v, int i) { v.initialize(large(i)); }inline void initialize(variant& v, unsigned int i) { v.initialize(large(i)); }inline void initialize(variant& v, bool i) { v.initialize(i); }inline void initialize(variant& v, double i) { v.initialize(i); }inline void initialize(variant& v, const char* i) { v.initialize(i); }inline void initialize(variant& v, const string& i) { v.initialize(i); }inline void initialize(variant& v, component* i) { v.initialize(i); }inline void initialize(variant& v, const variant& i) { v.initialize(i); }inline void finalize(variant& v) { if (v.tag >= VAR_COMPOUND) v.finalize(); }ptpublic extern const variant nullvar;// variant exception class; may be thrown when a variant// is being typecast'ed to 32-bit int and the value is// out of rangeclass ptpublic evariant: public exception{protected:public: evariant(const char* msg): exception(msg) {} evariant(const string& msg): exception(msg) {} virtual ~evariant();};// -------------------------------------------------------------------- //// --- pre-2.0 compatibility declarations ----------------------------- //// -------------------------------------------------------------------- //#ifdef PTYPES19_COMPAT// ptypes-1.9 objlist and strlist: accept only 'unknown' and// derivatives as a base typeclass ptpublic objlist: public tobjlist<unknown>{public: objlist(bool ownobjects = false); virtual ~objlist();};inline int length(const _objlist& s) { return s.get_count(); }inline void setlength(_objlist& s, int newcount) { s.set_count(newcount); }inline void pack(_objlist& s) { s.pack(); }inline void clear(_objlist& s) { s.clear(); }inline int push(_objlist& s, unknown* obj) { s.add(obj); return length(s) - 1; }inline unknown* top(const _objlist& s) { return (unknown*)s.top(); }inline void ins(_objlist& s, int i, unknown* obj) { s.ins(i, obj); }inline int add(_objlist& s, unknown* obj) { s.add(obj); return length(s) - 1; }inline void put(_objlist& s, int i, unknown* obj) { s.put(i, obj); }inline unknown* get(const _objlist& s, int i) { return (unknown*)s[i]; }inline unknown* pop(_objlist& s) { return (unknown*)s.pop(); }inline void del(_objlist& s, int i) { s.del(i); }inline int indexof(const _objlist& s, unknown* obj) { return s.indexof(obj); }class ptpublic strlist: public tstrlist<unknown>{public: strlist(int flags = 0); virtual ~strlist();};inline int length(const _strlist& s) { return s.get_count(); }inline void clear(_strlist& s) { s.clear(); }inline void pack(_strlist& s) { s.pack(); }inline bool search(const _strlist& s, const char* key, int& i) { return s.search(key, i); }inline void ins(_strlist& s, int i, const string& key, unknown* obj) { s.ins(i, key, obj); }inline int add(_strlist& s, const string& key, unknown* obj) { return s.add(key, obj); }inline void put(_strlist& s, int i, const string& key, unknown* obj) { s.put(i, key, obj); }inline void put(_strlist& s, int i, unknown* obj) { s.put(i, obj); }inline unknown* get(const _strlist& s, int i) { return (unknown*)s[i]; }inline const string& getstr(const _strlist& s, int i) { return s.getkey(i); }inline void del(_strlist& s, int i) { s.del(i); }inline int find(const _strlist& s, const char* key) { return s.indexof(key); }inline int indexof(const _strlist& s, unknown* obj) { return s.indexof(obj); }// ptypes-1.9 strmap: now replaced with _strlist(SL_SORTED)class ptpublic strmap: public tstrlist<unknown>{public: strmap(int flags = 0); virtual ~strmap();};inline void put(strmap& m, const string& key, unknown* obj) { m.put(key, obj); }inline unknown* get(const strmap& m, const char* key) { return m[key]; }inline void del(strmap& m, const char* key) { m.del(key); }template <class X> class tstrmap: public strmap{public: tstrmap(): strmap() {} tstrmap(int iflags): strmap(iflags) {} friend inline X* get(const tstrmap& m, const char* str) { return (X*)PTYPES_NAMESPACE::get((const strmap&)m, str); } friend inline void put(tstrmap& m, const string& str, X* obj) { unknown* t = obj; PTYPES_NAMESPACE::put(m, str, t); } X* operator[] (const char* str) const { return (X*)PTYPES_NAMESPACE::get(*this, str); }};// ptypes-1.9 textmap interfaceinline int length(const textmap& m) { return m.get_count(); }inline void clear(textmap& m) { m.clear(); }inline const string& get(const textmap& m, const string& k) { return m.get(k); }inline void put(textmap& m, const string& k, const string& v) { m.put(k, v); }inline void del(textmap& m, const string& k) { m.del(k); }#endif // PTYPES19_COMPAT#ifdef PTYPES18_COMPATinline string itobase(large value, int base, int width = 0, char pad = 0) { return itostring(value, base, width, pad); }typedef exception exceptobj;#endif // PTYPES18_COMPAT#ifdef _MSC_VER#pragma warning(pop)#pragma pack(pop)#endifPTYPES_END#endif // __PTYPES_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -