📄 ptypes.h.html
字号:
<font CLASS=keytype>void</font> dofree(<font CLASS=keytype>int</font> index, <font CLASS=keytype>int</font> count); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> dofree(<font CLASS=keytype>void</font>* obj); <font CLASS=comment>// pure method; defined in tobjlist instances</font> <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> compare(<font CLASS=keyword>const</font> <font CLASS=keytype>void</font>* key, <font CLASS=keyword>const</font> <font CLASS=keytype>void</font>* obj) <font CLASS=keyword>const</font>; <font CLASS=comment>// pure method; defined in _strlist</font><font CLASS=preproc><font CLASS=keyword>public</font>:</font> _objlist(); <font CLASS=keyword>virtual</font> ~_objlist(); <font CLASS=keytype>int</font> get_count() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> count; } <font CLASS=keytype>void</font> set_count(<font CLASS=keytype>int</font> newcount); <font CLASS=keytype>int</font> get_capacity() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> capacity; } <font CLASS=keytype>void</font> set_capacity(<font CLASS=keytype>int</font> newcap) { tpodlist<<font CLASS=keytype>void</font>*,<font CLASS=keyword>true</font>>::set_capacity(newcap); } <font CLASS=keytype>void</font> clear() { set_count(<font CLASS=integer>0</font>); } <font CLASS=keytype>void</font> pack() { tpodlist<<font CLASS=keytype>void</font>*,<font CLASS=keyword>true</font>>::pack(); } <font CLASS=keytype>void</font> ins(<font CLASS=keytype>int</font> index, <font CLASS=keytype>void</font>* obj) { tpodlist<<font CLASS=keytype>void</font>*,<font CLASS=keyword>true</font>>::ins(index, obj); } <font CLASS=keytype>void</font> add(<font CLASS=keytype>void</font>* obj) { tpodlist<<font CLASS=keytype>void</font>*,<font CLASS=keyword>true</font>>::add(obj); } <font CLASS=keytype>void</font> put(<font CLASS=keytype>int</font> index, <font CLASS=keytype>void</font>* obj) { idx(index); doput(index, obj); } <font CLASS=keytype>void</font>* <font CLASS=keyword>operator</font> [](<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font> { idx(index); <font CLASS=keyword>return</font> doget(index); } <font CLASS=keytype>void</font>* top() <font CLASS=keyword>const</font> { idx(<font CLASS=integer>0</font>); <font CLASS=keyword>return</font> doget(count <font CLASS=symbols>-</font> <font CLASS=integer>1</font>); } <font CLASS=keytype>void</font>* pop() { idx(<font CLASS=integer>0</font>); <font CLASS=keyword>return</font> dopop(); } <font CLASS=keytype>void</font> del(<font CLASS=keytype>int</font> index) { idx(index); dodel(index); } <font CLASS=keytype>void</font> del(<font CLASS=keytype>int</font> index, <font CLASS=keytype>int</font> count) { idx(index); dodel(index, count); } <font CLASS=keytype>int</font> indexof(<font CLASS=keytype>void</font>* obj) <font CLASS=keyword>const</font>; <font CLASS=keytype>bool</font> search(<font CLASS=keyword>const</font> <font CLASS=keytype>void</font>* key, <font CLASS=keytype>int</font>& index) <font CLASS=keyword>const</font>;};<font CLASS=comment>// the tobjlist template implements a list of pointers to arbitrary</font><font CLASS=comment>// structures. optionally can automatically free objects (ownobjects)</font><font CLASS=comment>// when removed from a list. only 2 virtual functions are being</font><font CLASS=comment>// instantiated by this template, the rest is static code in _objlist.</font><font CLASS=keyword>template</font> <<font CLASS=keyword>class</font> X> <font CLASS=keyword>class</font> tobjlist: <font CLASS=keyword>public</font> _objlist{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> X* doget(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> (X*)_objlist::doget(index); } <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> dofree(<font CLASS=keytype>void</font>* obj);<font CLASS=preproc><font CLASS=keyword>public</font>:</font> tobjlist(<font CLASS=keytype>bool</font> ownobjects <font CLASS=symbols>=</font> <font CLASS=keyword>false</font>): _objlist(ownobjects) {} <font CLASS=keyword>virtual</font> ~tobjlist(); <font CLASS=keytype>bool</font> get_ownobjects() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> config.ownobjects; } <font CLASS=keytype>void</font> set_ownobjects(<font CLASS=keytype>bool</font> newval) { config.ownobjects <font CLASS=symbols>=</font> newval; } <font CLASS=keytype>void</font> ins(<font CLASS=keytype>int</font> index, X* obj) { _objlist::ins(index, obj); } <font CLASS=keytype>void</font> add(X* obj) { _objlist::add(obj); } <font CLASS=keytype>void</font> put(<font CLASS=keytype>int</font> index, X* obj) { _objlist::put(index, obj); } X* <font CLASS=keyword>operator</font> [](<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font> { idx(index); <font CLASS=keyword>return</font> (X*)doget(index); } X* top() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> (X*)_objlist::top(); } X* pop() { <font CLASS=keyword>return</font> (X*)_objlist::pop(); } <font CLASS=keytype>int</font> indexof(X* obj) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> _objlist::indexof(obj); }<font CLASS=preproc>#ifdef</font> PTYPES19_COMPAT <font CLASS=keyword>friend</font> <font CLASS=keyword>inline</font> <font CLASS=keytype>void</font> ins(tobjlist& s, <font CLASS=keytype>int</font> i, X* obj) { s.ins(i, obj); } <font CLASS=keyword>friend</font> <font CLASS=keyword>inline</font> <font CLASS=keytype>int</font> add(tobjlist& s, X* obj) { s.add(obj); <font CLASS=keyword>return</font> s.get_count() <font CLASS=symbols>-</font> <font CLASS=integer>1</font>; } <font CLASS=keyword>friend</font> <font CLASS=keyword>inline</font> <font CLASS=keytype>void</font> put(tobjlist& s, <font CLASS=keytype>int</font> i, X* obj) { s.put(i, obj); } <font CLASS=keyword>friend</font> <font CLASS=keyword>inline</font> <font CLASS=keytype>int</font> indexof(<font CLASS=keyword>const</font> tobjlist& s, X* obj) { <font CLASS=keyword>return</font> s.indexof(obj); } <font CLASS=keyword>friend</font> <font CLASS=keyword>inline</font> <font CLASS=keytype>int</font> push(tobjlist& s, X* obj) { s.add(obj); <font CLASS=keyword>return</font> s.get_count() <font CLASS=symbols>-</font> <font CLASS=integer>1</font>; } <font CLASS=keyword>friend</font> <font CLASS=keyword>inline</font> X* pop(tobjlist& s) { <font CLASS=keyword>return</font> (X*)s.pop(); } <font CLASS=keyword>friend</font> <font CLASS=keyword>inline</font> X* top(<font CLASS=keyword>const</font> tobjlist& s) { <font CLASS=keyword>return</font> (X*)s.top(); } <font CLASS=keyword>friend</font> <font CLASS=keyword>inline</font> X* get(<font CLASS=keyword>const</font> tobjlist& s, <font CLASS=keytype>int</font> i) { <font CLASS=keyword>return</font> (X*)s[i]; }<font CLASS=preproc>#endif</font> };<font CLASS=keyword>template</font> <<font CLASS=keyword>class</font> X> <font CLASS=keytype>void</font> tobjlist<X>::dofree(<font CLASS=keytype>void</font>* item){ <font CLASS=keyword>delete</font> (X*)item;}<font CLASS=keyword>template</font> <<font CLASS=keyword>class</font> X> tobjlist<X>::~tobjlist(){ set_count(<font CLASS=integer>0</font>);}<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- tstrlist ------------------------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// _strlist is a base for the tstrlist template</font><font CLASS=keyword>enum</font> slflags{ SL_SORTED <font CLASS=symbols>=</font> 0x0001, SL_DUPLICATES <font CLASS=symbols>=</font> 0x0002, SL_CASESENS <font CLASS=symbols>=</font> 0x0004, SL_OWNOBJECTS <font CLASS=symbols>=</font> 0x0008,};<font CLASS=keyword>struct</font> _stritem{ string key; <font CLASS=keytype>void</font>* obj; _stritem(<font CLASS=keyword>const</font> string& ikey, <font CLASS=keytype>void</font>* iobj) : key(ikey), obj(iobj) {}};<font CLASS=keyword>class</font> _strlist: <font CLASS=keyword>protected</font> tobjlist<_stritem>{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font> <font CLASS=keytype>static</font> <font CLASS=keytype>void</font> sortederror(); <font CLASS=keytype>static</font> <font CLASS=keytype>void</font> notsortederror(); <font CLASS=keytype>static</font> <font CLASS=keytype>void</font> duperror(); <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> dofree(<font CLASS=keytype>void</font>* item); <font CLASS=keyword>virtual</font> <font CLASS=keytype>int</font> compare(<font CLASS=keyword>const</font> <font CLASS=keytype>void</font>* key, <font CLASS=keyword>const</font> <font CLASS=keytype>void</font>* item) <font CLASS=keyword>const</font>; <font CLASS=keyword>virtual</font> <font CLASS=keytype>void</font> dofreeobj(<font CLASS=keytype>void</font>* obj); <font CLASS=comment>// pure; tstrlist overrides it</font> <font CLASS=keyword>const</font> string& dogetkey(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> doget(index)<font CLASS=symbols>-</font>>key; } <font CLASS=keytype>void</font>* dogetobj(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> doget(index)<font CLASS=symbols>-</font>>obj; } <font CLASS=keytype>void</font> doins(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> string& key, <font CLASS=keytype>void</font>* obj); <font CLASS=keytype>void</font> doput(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> string& key, <font CLASS=keytype>void</font>* obj); <font CLASS=keytype>void</font> doput(<font CLASS=keytype>int</font> index, <font CLASS=keytype>void</font>* obj);<font CLASS=preproc><font CLASS=keyword>public</font>:</font> _strlist(<font CLASS=keytype>int</font> flags <font CLASS=symbols>=</font> <font CLASS=integer>0</font>); <font CLASS=keyword>virtual</font> ~_strlist(); <font CLASS=keytype>int</font> get_count() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> count; } <font CLASS=keytype>void</font> set_count(<font CLASS=keytype>int</font> newcount) { tobjlist<_stritem>::set_count(newcount); } <font CLASS=keytype>int</font> get_capacity() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> capacity; } <font CLASS=keytype>void</font> set_capacity(<font CLASS=keytype>int</font> newcap) { tobjlist<_stritem>::set_capacity(newcap); } <font CLASS=keytype>void</font> clear() { tobjlist<_stritem>::clear(); } <font CLASS=keytype>void</font> pack() { tobjlist<_stritem>::pack(); } <font CLASS=keytype>bool</font> get_sorted() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> config.sorted; } <font CLASS=keytype>bool</font> get_duplicates() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> config.duplicates; } <font CLASS=keytype>bool</font> get_casesens() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> config.casesens; } <font CLASS=keytype>bool</font> get_ownobjects() <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> config.ownslobjects; } <font CLASS=keytype>void</font> set_ownobjects(<font CLASS=keytype>bool</font> newval) { config.ownslobjects <font CLASS=symbols>=</font> newval; } <font CLASS=keytype>void</font> ins(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> string& key, <font CLASS=keytype>void</font>* obj) { idxa(index); doins(index, key, obj); } <font CLASS=keytype>void</font> put(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> string& key, <font CLASS=keytype>void</font>* obj) { idx(index); doput(index, key, obj); } <font CLASS=keytype>void</font> put(<font CLASS=keytype>int</font> index, <font CLASS=keytype>void</font>* obj) { idx(index); doput(index, obj); } <font CLASS=keytype>int</font> put(<font CLASS=keyword>const</font> string& key, <font CLASS=keytype>void</font>* obj); <font CLASS=keytype>int</font> add(<font CLASS=keyword>const</font> string& key, <font CLASS=keytype>void</font>* obj); <font CLASS=keytype>void</font>* <font CLASS=keyword>operator</font> [](<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font> { idx(index); <font CLASS=keyword>return</font> dogetobj(index); } <font CLASS=keytype>void</font>* <font CLASS=keyword>operator</font> [](<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* key) <font CLASS=keyword>const</font>; <font CLASS=keyword>const</font> string& getkey(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font> { idx(index); <font CLASS=keyword>return</font> dogetkey(index); } <font CLASS=keytype>bool</font> search(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* key, <font CLASS=keytype>int</font>& index) <font CLASS=keyword>const</font> { <font CLASS=keyword>return</font> _objlist::search(key, index); } <font CLASS=keytype>void</font> del(<font CLASS=keytype>int</font> index) { idx(index); dodel(index); } <font CLASS=keytype>void</font> del(<font CLASS=keytype>int</font> index, <font CLASS=keytype>int</font> delcount)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -