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

📄 ptypes.h.html

📁 PTypes是一个扩充了多线程和网络功能的STL库
💻 HTML
📖 第 1 页 / 共 5 页
字号:
    ~noncopyable() {}};<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- exception ------------------------------------------------------ //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// the basic exception class. NOTE: the library always throws dynamically</font><font CLASS=comment>// allocated exception objects.</font><font CLASS=keyword>class</font> exception: public unknown {<font CLASS=preproc><font CLASS=keyword>protected</font>:</font>    string message;<font CLASS=preproc><font CLASS=keyword>public</font>:</font>    exception(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* imsg);    exception(<font CLASS=keyword>const</font> string&amp; imsg);    <font CLASS=keyword>virtual</font> ~exception();    <font CLASS=keyword>virtual</font> string get_message() { <font CLASS=keyword>return</font> message; }};<font CLASS=comment>// conversion exception class for stringtoie() and stringtoue()</font><font CLASS=keyword>class</font> econv: public exception{<font CLASS=preproc><font CLASS=keyword>public</font>:</font>    econv(<font CLASS=keyword>const</font> <font CLASS=keytype>char</font>* msg): exception(msg)  {}    econv(<font CLASS=keyword>const</font> string&amp; msg): exception(msg)  {}    <font CLASS=keyword>virtual</font> ~econv();};<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- tpodlist ------------------------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// _podlist implements dynamic array of small POD structures; it serves</font><font CLASS=comment>// as a basis for all list types in the library. this class is undocumented.</font><font CLASS=comment>// tpodlist template must be used instead.</font><font CLASS=keyword>class</font> _podlist: public noncopyable{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font>    <font CLASS=keytype>void</font>* list;                   <font CLASS=comment>// pointer to the array</font>    <font CLASS=keytype>int</font>   count;                  <font CLASS=comment>// number of items in the list</font>    <font CLASS=keytype>int</font>   capacity;               <font CLASS=comment>// allocated for the list</font>    <font CLASS=keytype>int</font>   itemsize;               <font CLASS=comment>// list item size</font>    <font CLASS=keytype>static</font> <font CLASS=keytype>void</font> idxerror();    _podlist&amp; <font CLASS=keyword>operator</font> <font CLASS=symbols>=</font>(<font CLASS=keyword>const</font> _podlist&amp; t);    <font CLASS=keytype>void</font>  grow();    <font CLASS=keytype>void</font>* doins(<font CLASS=keytype>int</font> index);    <font CLASS=keytype>void</font>  doins(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> _podlist&amp;);    <font CLASS=keytype>void</font>* doget(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font>            { <font CLASS=keyword>return</font> (<font CLASS=keytype>char</font>*)list <font CLASS=symbols>+</font> index * itemsize; }    <font CLASS=keytype>void</font>  dodel(<font CLASS=keytype>int</font> index);    <font CLASS=keytype>void</font>  dodel(<font CLASS=keytype>int</font> index, <font CLASS=keytype>int</font> count);    <font CLASS=keytype>void</font>  dopop();<font CLASS=preproc>#ifdef</font> CHECK_BOUNDS     <font CLASS=keytype>void</font> idx(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font>               { <font CLASS=keyword>if</font> (<font CLASS=keytype>unsigned</font>(index) &gt;<font CLASS=symbols>=</font> <font CLASS=keytype>unsigned</font>(count)) idxerror(); }    <font CLASS=keytype>void</font> idxa(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font>              { <font CLASS=keyword>if</font> (<font CLASS=keytype>unsigned</font>(index) &gt; <font CLASS=keytype>unsigned</font>(count)) idxerror(); }<font CLASS=preproc>#else</font>     <font CLASS=keytype>void</font> idx(<font CLASS=keytype>int</font>) <font CLASS=keyword>const</font>                     { }    <font CLASS=keytype>void</font> idxa(<font CLASS=keytype>int</font>) <font CLASS=keyword>const</font>                    { }<font CLASS=preproc>#endif</font> <font CLASS=preproc><font CLASS=keyword>public</font>:</font>    _podlist(<font CLASS=keytype>int</font> itemsize);    ~_podlist();    <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>bool</font> zero <font CLASS=symbols>=</font> <font CLASS=keyword>false</font>);    <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);    <font CLASS=keytype>void</font>  clear()                           { set_count(<font CLASS=integer>0</font>); }    <font CLASS=keytype>void</font>  pack()                            { set_capacity(count); }    <font CLASS=keytype>void</font>* ins(<font CLASS=keytype>int</font> index)                    { idxa(index); <font CLASS=keyword>return</font> doins(index); }    <font CLASS=keytype>void</font>  ins(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> _podlist&amp; t) { idxa(index); doins(index, t); }    <font CLASS=keytype>void</font>* add();    <font CLASS=keytype>void</font>  add(<font CLASS=keyword>const</font> _podlist&amp; t);    <font CLASS=keytype>void</font>* <font CLASS=keyword>operator</font> [](<font CLASS=keytype>int</font> index)            { idx(index); <font CLASS=keyword>return</font> doget(index); }    <font CLASS=keytype>void</font>* top()                             { <font CLASS=keyword>return</font> <font CLASS=keyword>operator</font> [](count <font CLASS=symbols>-</font> <font CLASS=integer>1</font>); }    <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>void</font>  pop()                             { idx(<font CLASS=integer>0</font>); dopop(); }};<font CLASS=comment>// tpodlist is a fully-inlined template based on _podlist</font><font CLASS=keyword>template</font> &lt;<font CLASS=keyword>class</font> X, <font CLASS=keytype>bool</font> initzero <font CLASS=symbols>=</font> <font CLASS=keyword>false</font>&gt; <font CLASS=keyword>class</font> tpodlist: <font CLASS=keyword>public</font> _podlist{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font>    X&amp;   dozero(X&amp; t)                       { <font CLASS=keyword>if</font> (initzero) memset(&amp;t, <font CLASS=integer>0</font>, <font CLASS=keyword>sizeof</font>(X)); <font CLASS=keyword>return</font> t; }    X&amp;   doget(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font>             { <font CLASS=keyword>return</font> ((X*)list)[index]; }    X&amp;   doins(<font CLASS=keytype>int</font> index)                   { X&amp; t <font CLASS=symbols>=</font> *(X*)_podlist::doins(index); <font CLASS=keyword>return</font> dozero(t); }    <font CLASS=keytype>void</font> doins(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> X&amp; item)    { *(X*)_podlist::doins(index) <font CLASS=symbols>=</font> item; }<font CLASS=preproc><font CLASS=keyword>public</font>:</font>    tpodlist(): _podlist(<font CLASS=keyword>sizeof</font>(X))         {}    tpodlist&lt;X, initzero&gt;&amp; <font CLASS=keyword>operator</font> <font CLASS=symbols>=</font>(<font CLASS=keyword>const</font> tpodlist&lt;X, initzero&gt;&amp; t)                                            { _podlist::<font CLASS=keyword>operator</font> <font CLASS=symbols>=</font>(t); <font CLASS=keyword>return</font> *<font CLASS=keyword>this</font>; }    <font CLASS=keytype>void</font> set_count(<font CLASS=keytype>int</font> newcount)            { _podlist::set_count(newcount, initzero); }    X&amp;   ins(<font CLASS=keytype>int</font> index)                     { idxa(index); <font CLASS=keyword>return</font> doins(index); }    <font CLASS=keytype>void</font> ins(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> X&amp; item)      { idxa(index); doins(index, item); }    <font CLASS=keytype>void</font> ins(<font CLASS=keytype>int</font> index, <font CLASS=keyword>const</font> tpodlist&lt;X, initzero&gt;&amp; t)                                            { _podlist::ins(index, t); }    X&amp;   add()                              { grow(); <font CLASS=keyword>return</font> dozero(doget(count<font CLASS=symbols>++</font>)); }    <font CLASS=keytype>void</font> add(<font CLASS=keyword>const</font> X&amp; item)                 { grow(); doget(count<font CLASS=symbols>++</font>) <font CLASS=symbols>=</font> item; }    <font CLASS=keytype>void</font> add(<font CLASS=keyword>const</font> tpodlist&lt;X, initzero&gt;&amp; t)					    { _podlist::add(t); }    X&amp;   <font CLASS=keyword>operator</font> [](<font CLASS=keytype>int</font> index)             { idx(index); <font CLASS=keyword>return</font> doget(index); }    <font CLASS=keyword>const</font> X&amp; <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); }    X&amp;   top()                              { idx(<font CLASS=integer>0</font>); <font CLASS=keyword>return</font> doget(count <font CLASS=symbols>-</font> <font CLASS=integer>1</font>); }};<font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// --- tobjlist ------------------------------------------------------- //</font><font CLASS=comment>// -------------------------------------------------------------------- //</font><font CLASS=comment>// _objlist is a base for the tobjlist template, don't use it directly.</font><font CLASS=comment>// also, _objlist is a base for _strlist and derivatives.</font><font CLASS=keyword>class</font> _objlist: public unknown, <font CLASS=keyword>protected</font> tpodlist&lt;<font CLASS=keytype>void</font>*, <font CLASS=keyword>true</font>&gt;{<font CLASS=preproc><font CLASS=keyword>protected</font>:</font>    <font CLASS=keyword>struct</font>    {        <font CLASS=keytype>unsigned</font> ownobjects :<font CLASS=integer>1</font>;   <font CLASS=comment>// list is responsible for destroying the items; used in _objlist</font>        <font CLASS=keytype>unsigned</font> ownslobjects :<font CLASS=integer>1</font>; <font CLASS=comment>// same but for _strlist items (in _stritem structure)</font>        <font CLASS=keytype>unsigned</font> sorted :<font CLASS=integer>1</font>;       <font CLASS=comment>// sorted list (_objlist+)</font>        <font CLASS=keytype>unsigned</font> duplicates :<font CLASS=integer>1</font>;   <font CLASS=comment>// sorted: allows duplicate keys (_objlist+)</font>        <font CLASS=keytype>unsigned</font> casesens :<font CLASS=integer>1</font>;     <font CLASS=comment>// sorted: string comparison is case sensitive (_strlist+)</font>        <font CLASS=keytype>unsigned</font> _reserved :<font CLASS=integer>27</font>;    } config;    _objlist(bool ownobjects);	  <font CLASS=comment>// we hide this ctor, since _objlist actually can't free objects</font>    <font CLASS=keytype>void</font>* doget(<font CLASS=keytype>int</font> index) <font CLASS=keyword>const</font>            { <font CLASS=keyword>return</font> ((<font CLASS=keytype>void</font>**)list)[index]; }    <font CLASS=keytype>void</font>  doput(<font CLASS=keytype>int</font> index, <font CLASS=keytype>void</font>* obj);    <font CLASS=keytype>void</font>  dodel(<font CLASS=keytype>int</font> index);    <font CLASS=keytype>void</font>  dodel(<font CLASS=keytype>int</font> index, <font CLASS=keytype>int</font> count);    <font CLASS=keytype>void</font>* dopop();

⌨️ 快捷键说明

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