📄 ptypes.h.html
字号:
string fill(<font CLASS=keytype>int</font> width, <font CLASS=keytype>char</font> pad);string pad(<font CLASS=keyword>const</font> string& s, <font CLASS=keytype>int</font> width, <font CLASS=keytype>char</font> c, <font CLASS=keytype>bool</font> left <font CLASS=symbols>=</font> <font CLASS=keyword>true</font>);string itostring(large value, <font CLASS=keytype>int</font> base, <font CLASS=keytype>int</font> width <font CLASS=symbols>=</font> <font CLASS=integer>0</font>, <font CLASS=keytype>char</font> pad <font CLASS=symbols>=</font> <font CLASS=integer>0</font>);string itostring(ularge value, <font CLASS=keytype>int</font> base, <font CLASS=keytype>int</font> width <font CLASS=symbols>=</font> <font CLASS=integer>0</font>, <font CLASS=keytype>char</font> pad <font CLASS=symbols>=</font> <font CLASS=integer>0</font>);string itostring(<font CLASS=keytype>int</font> value, <font CLASS=keytype>int</font> base, <font CLASS=keytype>int</font> width <font CLASS=symbols>=</font> <font CLASS=integer>0</font>, <font CLASS=keytype>char</font> pad <font CLASS=symbols>=</font> <font CLASS=integer>0</font>);string itostring(<font CLASS=keytype>unsigned</font> value, <font CLASS=keytype>int</font> base, <font CLASS=keytype>int</font> width <font CLASS=symbols>=</font> <font CLASS=integer>0</font>, <font CLASS=keytype>char</font> pad <font CLASS=symbols>=</font> <font CLASS=integer>0</font>);string itostring(large v);string itostring(ularge v);string itostring(<font CLASS=keytype>int</font> v);string itostring(<font CLASS=keytype>unsigned</font> v);large stringtoi(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>*);large stringtoie(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>*);ularge stringtoue(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>*, <font CLASS=keytype>int</font> base);string lowercase(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* s);string lowercase(<font CLASS=keyword>const</font> string& s);<font CLASS=keytype>char</font> hex4(<font CLASS=keytype>char</font> c);<font CLASS=keyword>inline</font> <font CLASS=keytype>char</font> locase(<font CLASS=keytype>char</font> c) { <font CLASS=keyword>if</font> (c ><font CLASS=symbols>=</font> <font CLASS=sinquot>'A'</font> && c <<font CLASS=symbols>=</font> <font CLASS=sinquot>'Z'</font>) <font CLASS=keyword>return</font> <font CLASS=keytype>char</font>(c + <font CLASS=integer>32</font>); <font CLASS=keyword>return</font> c; }<font CLASS=keyword>inline</font> <font CLASS=keytype>char</font> upcase(<font CLASS=keytype>char</font> c) { <font CLASS=keyword>if</font> (c ><font CLASS=symbols>=</font> <font CLASS=sinquot>'a'</font> && c <<font CLASS=symbols>=</font> <font CLASS=sinquot>'z'</font>) <font CLASS=keyword>return</font> <font CLASS=keytype>char</font>(c - <font CLASS=integer>32</font>); <font CLASS=keyword>return</font> c; }<font CLASS=keyword>inline</font> <font CLASS=keytype>int</font> hstrlen(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* p) <font CLASS=comment>// some Unix systems do not accept NULL</font> { <font CLASS=keyword>return</font> p <font CLASS=symbols>==</font> nil ? <font CLASS=integer>0</font> : (<font CLASS=keytype>int</font>)strlen(p); }<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- character set -------------------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=keyword>const</font> <font CLASS=keytype>int</font> _csetbits <font CLASS=symbols>=</font> <font CLASS=integer>256</font>;<font CLASS=keyword>const</font> <font CLASS=keytype>int</font> _csetbytes <font CLASS=symbols>=</font> _csetbits / <font CLASS=integer>8</font>;<font CLASS=keyword>const</font> <font CLASS=keytype>int</font> _csetwords <font CLASS=symbols>=</font> _csetbytes / <font CLASS=keyword>sizeof</font>(<font CLASS=keytype>int</font>);<font CLASS=keyword>const</font> <font CLASS=keytype>char</font> _csetesc <font CLASS=symbols>=</font> <font CLASS=sinquot>'~'</font>;<font CLASS=keyword>class</font> cset {<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keytype>char</font> data[_csetbytes]; <font CLASS=keytype>void</font> assign(<font CLASS=keyword>const</font> cset& s) { memcpy(data, s.data, _csetbytes); } <font CLASS=keytype>void</font> assign(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* setinit); <font CLASS=keytype>void</font> clear() { memset(data, <font CLASS=integer>0</font>, _csetbytes); } <font CLASS=keytype>void</font> fill() { memset(data, <font CLASS=symbols>-</font><font CLASS=integer>1</font>, _csetbytes); } <font CLASS=keytype>void</font> include(<font CLASS=keytype>char</font> b) { data[uchar(b) / <font CLASS=integer>8</font>] <font CLASS=symbols>|=</font> uchar(<font CLASS=integer>1</font> << (uchar(b) % <font CLASS=integer>8</font>)); } <font CLASS=keytype>void</font> include(<font CLASS=keytype>char</font> min, <font CLASS=keytype>char</font> max); <font CLASS=keytype>void</font> exclude(<font CLASS=keytype>char</font> b) { data[uchar(b) / <font CLASS=integer>8</font>] &<font CLASS=symbols>=</font> uchar(~(<font CLASS=integer>1</font> << (uchar(b) % <font CLASS=integer>8</font>))); } <font CLASS=keytype>void</font> unite(<font CLASS=keyword>const</font> cset& s); <font CLASS=keytype>void</font> subtract(<font CLASS=keyword>const</font> cset& s); <font CLASS=keytype>void</font> intersect(<font CLASS=keyword>const</font> cset& s); <font CLASS=keytype>void</font> invert(); <font CLASS=keytype>bool</font> contains(<font CLASS=keytype>char</font> b) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> (data[uchar(b) / <font CLASS=integer>8</font>] & (<font CLASS=integer>1</font> << (uchar(b) % <font CLASS=integer>8</font>))) <font CLASS=symbols>!=</font> <font CLASS=integer>0</font>; } <font CLASS=keytype>bool</font> eq(<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> memcmp(data, s.data, _csetbytes) <font CLASS=symbols>==</font> <font CLASS=integer>0</font>; } <font CLASS=keytype>bool</font> le(<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font>;<font CLASS=preproc><font CLASS=keyword>public</font>:</font> cset() { clear(); } cset(<font CLASS=keyword>const</font> cset& s) { assign(s); } cset(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* setinit) { assign(setinit); } cset& <font CLASS=keyword>operator</font><font CLASS=symbols>=</font> (<font CLASS=keyword>const</font> cset& s) { assign(s); <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; } cset& <font CLASS=keyword>operator</font><font CLASS=symbols>+=</font> (<font CLASS=keyword>const</font> cset& s) { unite(s); <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; } cset& <font CLASS=keyword>operator</font><font CLASS=symbols>+=</font> (<font CLASS=keytype>char</font> b) { include(b); <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; } cset <font CLASS=keyword>operator</font><font CLASS=symbols>+</font> (<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font> { cset t <font CLASS=symbols>=</font> *<font CLASS=keyword>this</font>; <font CLASS=keyword>return</font> t += s; } cset <font CLASS=keyword>operator</font><font CLASS=symbols>+</font> (<font CLASS=keytype>char</font> b) <font CLASS=keyword>const</font> { cset t <font CLASS=symbols>=</font> *<font CLASS=keyword>this</font>; <font CLASS=keyword>return</font> t += b; } cset& <font CLASS=keyword>operator</font><font CLASS=symbols>-=</font> (<font CLASS=keyword>const</font> cset& s) { subtract(s); <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; } cset& <font CLASS=keyword>operator</font><font CLASS=symbols>-=</font> (<font CLASS=keytype>char</font> b) { exclude(b); <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; } cset <font CLASS=keyword>operator</font><font CLASS=symbols>-</font> (<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font> { cset t <font CLASS=symbols>=</font> *<font CLASS=keyword>this</font>; <font CLASS=keyword>return</font> t -= s; } cset <font CLASS=keyword>operator</font><font CLASS=symbols>-</font> (<font CLASS=keytype>char</font> b) <font CLASS=keyword>const</font> { cset t <font CLASS=symbols>=</font> *<font CLASS=keyword>this</font>; <font CLASS=keyword>return</font> t -= b; } cset& <font CLASS=keyword>operator</font>*<font CLASS=symbols>=</font> (<font CLASS=keyword>const</font> cset& s) { intersect(s); <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; } cset <font CLASS=keyword>operator</font>* (<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font> { cset t <font CLASS=symbols>=</font> *<font CLASS=keyword>this</font>; <font CLASS=keyword>return</font> t *<font CLASS=symbols>=</font> s; } cset <font CLASS=keyword>operator</font><font CLASS=symbols>!</font> () <font CLASS=keyword>const</font> { cset t <font CLASS=symbols>=</font> *<font CLASS=keyword>this</font>; t.invert(); <font CLASS=keyword>return</font> t; } <font CLASS=keytype>bool</font> <font CLASS=keyword>operator</font><font CLASS=symbols>==</font> (<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> eq(s); } <font CLASS=keytype>bool</font> <font CLASS=keyword>operator</font><font CLASS=symbols>!=</font> (<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> !eq(s); } <font CLASS=keytype>bool</font> <font CLASS=keyword>operator</font><<font CLASS=symbols>=</font> (<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> le(s); } <font CLASS=keytype>bool</font> <font CLASS=keyword>operator</font>><font CLASS=symbols>=</font> (<font CLASS=keyword>const</font> cset& s) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> s.le(*<font CLASS=keyword>this</font>); } <font CLASS=keyword>friend</font> cset <font CLASS=keyword>operator</font><font CLASS=symbols>+</font> (<font CLASS=keytype>char</font> b, <font CLASS=keyword>const</font> cset& s); <font CLASS=keyword>friend</font> <font CLASS=keytype>bool</font> <font CLASS=keyword>operator</font>& (<font CLASS=keytype>char</font> b, <font CLASS=keyword>const</font> cset& s); <font CLASS=keyword>friend</font> <font CLASS=keytype>void</font> assign(cset& s, <font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* setinit); <font CLASS=keyword>friend</font> <font CLASS=keytype>void</font> clear(cset& s); <font CLASS=keyword>friend</font> <font CLASS=keytype>void</font> fill(cset& s); <font CLASS=keyword>friend</font> <font CLASS=keytype>void</font> include(cset& s, <font CLASS=keytype>char</font> b); <font CLASS=keyword>friend</font> <font CLASS=keytype>void</font> include(cset& s, <font CLASS=keytype>char</font> min, <font CLASS=keytype>char</font> max); <font CLASS=keyword>friend</font> <font CLASS=keytype>void</font> exclude(cset& s, <font CLASS=keytype>char</font> b); <font CLASS=keyword>friend</font> string asstring(<font CLASS=keyword>const</font> cset& s);};<font CLASS=keyword>inline</font> cset <font CLASS=keyword>operator</font><font CLASS=symbols>+</font> (<font CLASS=keytype>char</font> b, <font CLASS=keyword>const</font> cset& s) { <font CLASS=keyword>return</font> s <font CLASS=symbols>+</font> b; }<font CLASS=keyword>inline</font> <font CLASS=keytype>bool</font> <font CLASS=keyword>operator</font>& (<font CLASS=keytype>char</font> b, <font CLASS=keyword>const</font> cset& s) { <font CLASS=keyword>return</font> s.contains(b); }<font CLASS=keyword>inline</font> <font CLASS=keytype>void</font> assign(cset& s, <font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* setinit) { s.assign(setinit); }<font CLASS=keyword>inline</font> <font CLASS=keytype>void</font> clear(cset& s) { s.clear(); }<font CLASS=keyword>inline</font> <font CLASS=keytype>void</font> fill(cset& s) { s.fill(); }<font CLASS=keyword>inline</font> <font CLASS=keytype>void</font> include(cset& s, <font CLASS=keytype>char</font> b) { s.include(b); }<font CLASS=keyword>inline</font> <font CLASS=keytype>void</font> include(cset& s, <font CLASS=keytype>char</font> min, <font CLASS=keytype>char</font> max) { s.include(min, max); }<font CLASS=keyword>inline</font> <font CLASS=keytype>void</font> exclude(cset& s, <font CLASS=keytype>char</font> b) { s.exclude(b); }<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- basic abstract classes ----------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// basic class with virtual destructor; historically was used as a base</font><font CLASS=comment>// for all list items. also helps to count the number of created and</font><font CLASS=comment>// destroyed objects in a program (objalloc global) in DEBUG mode, to</font><font CLASS=comment>// detect memory leaks. most classes in ptypes are derived from unknown.</font><font CLASS=keyword>extern</font> <font CLASS=keytype>int</font> objalloc;<font CLASS=keyword>class</font> unknown {<font CLASS=preproc><font CLASS=keyword>private</font>:</font> // make all classes non-copyable by <font CLASS=keyword>default</font> unknown(<font CLASS=keyword>const</font> unknown&); <font CLASS=keyword>const</font> unknown& <font CLASS=keyword>operator</font><font CLASS=symbols>=</font> (<font CLASS=keyword>const</font> unknown&);<font CLASS=preproc><font CLASS=keyword>public</font>:</font><font CLASS=preproc>#ifdef</font> COUNT_OBJALLOC unknown() { pincrement(&objalloc); } <font CLASS=keyword>virtual</font> ~unknown() { pdecrement(&objalloc); }<font CLASS=preproc>#else</font> unknown() { } <font CLASS=keyword>virtual</font> ~unknown() { }<font CLASS=preproc>#endif</font> };<font CLASS=keyword>typedef</font> unknown* punknown;<font CLASS=comment>// provide non-copyable base for all classes that are</font><font CLASS=comment>// not derived from 'unknown'</font><font CLASS=keyword>class</font> noncopyable {<font CLASS=preproc><font CLASS=keyword>private</font>:</font> noncopyable(<font CLASS=keyword>const</font> noncopyable&); <font CLASS=keyword>const</font> noncopyable& <font CLASS=keyword>operator</font><font CLASS=symbols>=</font> (<font CLASS=keyword>const</font> noncopyable&);<font CLASS=preproc><font CLASS=keyword>public</font>:</font> noncopyable() {}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -