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

📄 ptypes.h

📁 PTypes是一个扩充了多线程和网络功能的STL库
💻 H
📖 第 1 页 / 共 4 页
字号:
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 + -