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

📄 ptypes.h

📁 PTypes是一个扩充了多线程和网络功能的STL库
💻 H
📖 第 1 页 / 共 4 页
字号:
/* * *  C++ Portable Types Library (PTypes) *  Version 2.0.2  Released 17-May-2004 * *  Copyright (C) 2001-2004 Hovik Melikyan * *  http://www.melikyan.com/ptypes/ * */#ifndef __PTYPES_H__#define __PTYPES_H__#ifndef __PPORT_H__#include "pport.h"#endif#include <string.h>PTYPES_BEGIN#ifdef _MSC_VER#pragma pack(push, 4)// disable "non dll-interface class '...' used as base for dll-interface class '...'" warning#pragma warning(disable : 4275)// disable "conditional expression constant" warning#pragma warning(push)#pragma warning(disable : 4127)#endifptpublic int   __PFASTCALL pincrement(int* target);ptpublic int   __PFASTCALL pdecrement(int* target);ptpublic int   __PFASTCALL pexchange(int* target, int value);ptpublic void* __PFASTCALL pexchange(void** target, void* value);template <class T> inline T* tpexchange(T** target, T* value)    { return (T*)pexchange((void**)target, (void*)value); }#if (__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)#  define VARIANT_TYPECAST_HACK#endif// -------------------------------------------------------------------- //// --- string class --------------------------------------------------- //// -------------------------------------------------------------------- //// dynamic string class with thread-safe ref-counted bufferstruct _strrec {    int refcount;    int length;};typedef _strrec* _pstrrec;#define STR_BASE(x)      (_pstrrec(x)-1)#define STR_REFCOUNT(x)  (STR_BASE(x)->refcount)#define STR_LENGTH(x)    (STR_BASE(x)->length)#define PTR_TO_PSTRING(p)   (pstring(&(p)))#define PTR_TO_STRING(p)    (*PTR_TO_PSTRING(p))ptpublic extern char* emptystr;class ptpublic string {    friend class variant;protected:    char* data;    static void idxerror();    void _alloc(int);    void _realloc(int);    void _free();    void initialize()  { data = emptystr; }    void initialize(const char*, int);    void initialize(const char*);    void initialize(char);    void initialize(const string& s);    void initialize(const char*, int, const char*, int);    void initialize(const variant&);    void finalize();    void assign(const char*, int);    void assign(const char*);    void assign(const string&);    void assign(char);#ifdef CHECK_BOUNDS    void idx(int index) const  { if (unsigned(index) >= unsigned(STR_LENGTH(data))) idxerror(); }#else    void idx(int) const        { }#endif    string(const char* s1, int len1, const char* s2, int len2)  { initialize(s1, len1, s2, len2); }public:    friend int    length(const string& s);    friend int    refcount(const string& s);    friend void   assign(string& s, const char* buf, int len);    friend void   clear(string& s);    friend bool   isempty(const string& s);    ptpublic friend char*  ptdecl setlength(string&, int);    ptpublic friend char*  ptdecl unique(string&);    ptpublic friend void   ptdecl concat(string& s, const char* sc, int catlen);    ptpublic friend void   ptdecl concat(string& s, const char* s1);    ptpublic friend void   ptdecl concat(string& s, char s1);    ptpublic friend void   ptdecl concat(string& s, const string& s1);    ptpublic friend string ptdecl copy(const string& s, int from, int cnt);    ptpublic friend string ptdecl copy(const string& s, int from);    ptpublic friend void   ptdecl ins(const char* s1, int s1len, string& s, int at);    ptpublic friend void   ptdecl ins(const char* s1, string& s, int at);    ptpublic friend void   ptdecl ins(char s1, string& s, int at);    ptpublic friend void   ptdecl ins(const string& s1, string& s, int at);    ptpublic friend void   ptdecl del(string& s, int at, int cnt);    ptpublic friend void   ptdecl del(string& s, int at);    ptpublic friend int    ptdecl pos(const char* s1, const string& s);    ptpublic friend int    ptdecl pos(char s1, const string& s);    friend int    pos(const string& s1, const string& s);    ptpublic friend int    ptdecl rpos(char s1, const string& s);    ptpublic friend bool   ptdecl contains(const char* s1, int len, const string& s, int at);    ptpublic friend bool   ptdecl contains(const char* s1, const string& s, int at);    ptpublic friend bool   ptdecl contains(char s1, const string& s, int at);    ptpublic friend bool   ptdecl contains(const string& s1, const string& s, int at);    ptpublic friend string ptdecl dup(const string& s);    string()                                      { initialize(); }    string(const char* sc, int initlen)           { initialize(sc, initlen); }    string(const char* sc)                        { initialize(sc); }    string(char c)                                { initialize(c); }    string(const string& s)                       { initialize(s); }    ~string()                                     { finalize(); }#ifdef VARIANT_TYPECAST_HACK    string(const variant& v)                      { initialize(v); }#endif    string& operator=  (const char* sc)           { assign(sc); return *this; }    string& operator=  (char c)                   { assign(c); return *this; }    string& operator=  (const string& s)          { assign(s); return *this; }    string& operator+= (const char* sc)           { concat(*this, sc); return *this; }    string& operator+= (char c)                   { concat(*this, c); return *this; }    string& operator+= (const string& s)          { concat(*this, s); return *this; }    string  operator+  (const char* sc) const;    string  operator+  (char c) const;    string  operator+  (const string& s) const;    ptpublic friend string ptdecl operator+ (const char* sc, const string& s);    ptpublic friend string ptdecl operator+ (char c, const string& s);    bool operator== (const char* sc) const        { return strcmp(data, sc) == 0; }    bool operator== (char) const;    bool operator== (const string&) const;    bool operator!= (const char* sc) const        { return !(*this == sc); }    bool operator!= (char c) const                { return !(*this == c); }    bool operator!= (const string& s) const       { return !(*this == s); }    friend bool operator== (const char*, const string&);    friend bool operator== (char, const string&);    friend bool operator!= (const char*, const string&);    friend bool operator!= (char, const string&);    operator const char*() const                  { return data; }    operator const uchar*() const                 { return (uchar*)data; }    char&       operator[] (int i)                { idx(i); return unique(*this)[i]; }    const char& operator[] (int i) const          { idx(i); return data[i]; }    friend void initialize(string& s);    friend void initialize(string& s, const string& s1);    friend void initialize(string& s, const char* s1);    friend void finalize(string& s);};typedef string* pstring;inline int  length(const string& s)                     { return STR_LENGTH(s.data); }inline int  refcount(const string& s)                   { return STR_REFCOUNT(s.data); }inline void assign(string& s, const char* buf, int len) { s.assign(buf, len); }inline void clear(string& s)                            { s.finalize(); }inline bool isempty(const string& s)                    { return length(s) == 0; }inline int  pos(const string& s1, const string& s)      { return pos(s1.data, s); }inline bool operator== (const char* sc, const string& s){ return s == sc; }inline bool operator== (char c, const string& s)        { return s == c; }inline bool operator!= (const char* sc, const string& s){ return s != sc; }inline bool operator!= (char c, const string& s)        { return s != c; }inline void initialize(string& s)                       { s.initialize(); }inline void initialize(string& s, const string& s1)     { s.initialize(s1); }inline void initialize(string& s, const char* s1)       { s.initialize(s1); }inline void finalize(string& s)                         { s.finalize(); }ptpublic extern int stralloc;ptpublic extern string nullstring;// -------------------------------------------------------------------- //// --- string utilities ----------------------------------------------- //// -------------------------------------------------------------------- //ptpublic string ptdecl fill(int width, char pad);ptpublic string ptdecl pad(const string& s, int width, char c, bool left = true);ptpublic string ptdecl itostring(large value, int base, int width = 0, char pad = 0);ptpublic string ptdecl itostring(ularge value, int base, int width = 0, char pad = 0);ptpublic string ptdecl itostring(int value, int base, int width = 0, char pad = 0);ptpublic string ptdecl itostring(unsigned value, int base, int width = 0, char pad = 0);ptpublic string ptdecl itostring(large v);ptpublic string ptdecl itostring(ularge v);ptpublic string ptdecl itostring(int v);ptpublic string ptdecl itostring(unsigned v);ptpublic large  ptdecl stringtoi(const char*);ptpublic large  ptdecl stringtoie(const char*);ptpublic ularge ptdecl stringtoue(const char*, int base);ptpublic string ptdecl lowercase(const char* s);ptpublic string ptdecl lowercase(const string& s);char hex4(char c);inline char locase(char c)     { if (c >= 'A' && c <= 'Z') return char(c + 32); return c; }inline char upcase(char c)     { if (c >= 'a' && c <= 'z') return char(c - 32); return c; }inline int hstrlen(const char* p) // some Unix systems do not accept NULL    { return p == nil ? 0 : (int)strlen(p); }// -------------------------------------------------------------------- //// --- character set -------------------------------------------------- //// -------------------------------------------------------------------- //const int  _csetbits = 256;const int  _csetbytes = _csetbits / 8;const int  _csetwords = _csetbytes / sizeof(int);const char _csetesc = '~';class ptpublic cset {protected:    char data[_csetbytes];    void assign(const cset& s)                  { memcpy(data, s.data, _csetbytes); }    void assign(const char* setinit);    void clear()                                { memset(data, 0, _csetbytes); }    void fill()                                 { memset(data, -1, _csetbytes); }    void include(char b)                        { data[uchar(b) / 8] |= uchar(1 << (uchar(b) % 8)); }    void include(char min, char max);    void exclude(char b)                        { data[uchar(b) / 8] &= uchar(~(1 << (uchar(b) % 8))); }    void unite(const cset& s);    void subtract(const cset& s);    void intersect(const cset& s);    void invert();    bool contains(char b) const                 { return (data[uchar(b) / 8] & (1 << (uchar(b) % 8))) != 0; }    bool eq(const cset& s) const                { return memcmp(data, s.data, _csetbytes) == 0; }    bool le(const cset& s) const;public:    cset()                                      { clear(); }    cset(const cset& s)                         { assign(s); }    cset(const char* setinit)                   { assign(setinit); }    cset& operator=  (const cset& s)            { assign(s); return *this; }    cset& operator+= (const cset& s)            { unite(s); return *this; }    cset& operator+= (char b)                   { include(b); return *this; }    cset  operator+  (const cset& s) const      { cset t = *this; return t += s; }    cset  operator+  (char b) const             { cset t = *this; return t += b; }

⌨️ 快捷键说明

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