diff options
Diffstat (limited to 'runtime/docs/html/map_8c-source.html')
-rw-r--r-- | runtime/docs/html/map_8c-source.html | 768 |
1 files changed, 391 insertions, 377 deletions
diff --git a/runtime/docs/html/map_8c-source.html b/runtime/docs/html/map_8c-source.html index 301087fb..03aa6f47 100644 --- a/runtime/docs/html/map_8c-source.html +++ b/runtime/docs/html/map_8c-source.html @@ -5,7 +5,7 @@ </head><body> <div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div> -<!-- Generated by Doxygen 1.3.9.1 --> +<!-- Generated by Doxygen 1.4.1 --> <h1>map.c</h1><a href="map_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span> 00002 00003 <span class="keyword">static</span> <span class="keywordtype">int</span> map_sizes[] = { @@ -35,21 +35,21 @@ 00027 <span class="keywordtype">char</span> *v = (<span class="keywordtype">char</span> *)key1; 00028 <span class="keywordflow">while</span> (v && *v && count++ < 5) 00029 hash += *v++; -00030 <span class="keywordflow">return</span> hash_long((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)(hash ^ key2), HASH_TABLE_BITS); +00030 return hash_long((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)(hash ^ key2), HASH_TABLE_BITS); 00031 } 00032 -<a name="l00043"></a><a class="code" href="map_8c.html#a3">00043</a> <a class="code" href="structmap__root.html">MAP</a> <a class="code" href="map_8c.html#a3">_stp_map_new</a>(<span class="keywordtype">unsigned</span> max_entries, <span class="keyword">enum</span> valtype type) +<a name="l00043"></a><a class="code" href="map_8c.html#a3">00043</a> <a class="code" href="structmap__root.html">MAP</a> _stp_map_new(<span class="keywordtype">unsigned</span> max_entries, enum valtype type) 00044 { 00045 size_t size; -00046 <a class="code" href="structmap__root.html">MAP</a> m = (<a class="code" href="structmap__root.html">MAP</a>) <a class="code" href="alloc_8h.html#a4">_stp_valloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structmap__root.html">map_root</a>)); +00046 <a class="code" href="structmap__root.html">MAP</a> m = (<a class="code" href="structmap__root.html">MAP</a>) <a class="code" href="alloc_8h.html#a5">_stp_valloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structmap__root.html">map_root</a>)); 00047 <span class="keywordflow">if</span> (m == NULL) 00048 <span class="keywordflow">return</span> NULL; 00049 -00050 INIT_LIST_HEAD(&m-><a class="code" href="structmap__root.html#o3">head</a>); +00050 INIT_LIST_HEAD(&m-><a class="code" href="structmap__root.html#o4">head</a>); 00051 -00052 m-><a class="code" href="structmap__root.html#o0">maxnum</a> = max_entries; -00053 m->type = type; -00054 <span class="keywordflow">if</span> (type >= END) { +00052 m-><a class="code" href="structmap__root.html#o1">maxnum</a> = max_entries; +00053 m-><a class="code" href="structmap__root.html#o0">type</a> = type; +00054 <span class="keywordflow">if</span> (type >= <a class="code" href="map_8h.html#a19a17">END</a>) { 00055 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"map_new: unknown type %d\n"</span>, type); 00056 <span class="keywordflow">return</span> NULL; 00057 } @@ -59,16 +59,16 @@ 00061 <span class="keywordtype">int</span> i; 00062 <span class="keyword">struct </span>list_head *e; 00063 -00064 INIT_LIST_HEAD(&m-><a class="code" href="structmap__root.html#o4">pool</a>); +00064 INIT_LIST_HEAD(&m-><a class="code" href="structmap__root.html#o5">pool</a>); 00065 size = map_sizes[type]; -00066 tmp = <a class="code" href="alloc_8h.html#a4">_stp_valloc</a>(max_entries * size); +00066 tmp = <a class="code" href="alloc_8h.html#a5">_stp_valloc</a>(max_entries * size); 00067 00068 <span class="keywordflow">for</span> (i = max_entries - 1; i >= 0; i--) { 00069 e = i * size + tmp; 00070 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"e=%lx\n"</span>, (<span class="keywordtype">long</span>)e); -00071 list_add(e, &m-><a class="code" href="structmap__root.html#o4">pool</a>); +00071 list_add(e, &m-><a class="code" href="structmap__root.html#o5">pool</a>); 00072 } -00073 m-><a class="code" href="structmap__root.html#o11">membuf</a> = tmp; +00073 m-><a class="code" href="structmap__root.html#o14">membuf</a> = tmp; 00074 } 00075 <span class="keywordflow">return</span> m; 00076 } @@ -77,41 +77,41 @@ 00079 { 00080 <span class="keyword">struct </span>map_node_str *m = (<span class="keyword">struct </span>map_node_str *)n; 00081 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"n = %lx\n"</span>, (<span class="keywordtype">long</span>)n); -00082 <span class="keywordflow">if</span> (map->type == STRING) { +00082 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o0">type</a> == STRING) { 00083 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"val STRING %lx\n"</span>, (<span class="keywordtype">long</span>)m-><a class="code" href="structmap__node__str.html#o1">str</a>); 00084 <span class="keywordflow">if</span> (m-><a class="code" href="structmap__node__str.html#o1">str</a>) -00085 <a class="code" href="alloc_8h.html#a5">_stp_free</a>(m-><a class="code" href="structmap__node__str.html#o1">str</a>); +00085 _stp_free(m->str); 00086 } -00087 <span class="keywordflow">if</span> (m-><a class="code" href="structmap__node__str.html#o0">n</a>.key1type == STR) { +00087 if (m->n.key1type == STR) { 00088 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"key1 STR %lx\n"</span>, (<span class="keywordtype">long</span>)<a class="code" href="map_8h.html#a0">key1str</a>(m)); 00089 <span class="keywordflow">if</span> (<a class="code" href="map_8h.html#a0">key1str</a>(m)) -00090 <a class="code" href="alloc_8h.html#a5">_stp_free</a>(<a class="code" href="map_8h.html#a0">key1str</a>(m)); +00090 _stp_free(key1str(m)); 00091 } -00092 <span class="keywordflow">if</span> (m-><a class="code" href="structmap__node__str.html#o0">n</a>.key2type == STR) { +00092 if (m->n.key2type == STR) { 00093 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"key2 STR %lx\n"</span>, (<span class="keywordtype">long</span>)<a class="code" href="map_8h.html#a1">key2str</a>(m)); 00094 <span class="keywordflow">if</span> (<a class="code" href="map_8h.html#a1">key2str</a>(m)) -00095 <a class="code" href="alloc_8h.html#a5">_stp_free</a>(<a class="code" href="map_8h.html#a1">key2str</a>(m)); +00095 _stp_free(key2str(m)); 00096 } 00097 } 00098 -<a name="l00104"></a><a class="code" href="map_8c.html#a5">00104</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(<a class="code" href="structmap__root.html">MAP</a> map) +<a name="l00104"></a><a class="code" href="map_8c.html#a5">00104</a> <span class="keywordtype">void</span> _stp_map_key_del(<a class="code" href="structmap__root.html">MAP</a> map) 00105 { 00106 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *m; 00107 -00108 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"create=%d key=%lx\n"</span>, map-><a class="code" href="structmap__root.html#o6">create</a>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); +00108 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"create=%d key=%lx\n"</span>, map->create, (<span class="keywordtype">long</span>)map->key); 00109 <span class="keywordflow">if</span> (map == NULL) 00110 <span class="keywordflow">return</span>; 00111 -00112 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">create</a>) { -00113 map-><a class="code" href="structmap__root.html#o6">create</a> = 0; -00114 map-><a class="code" href="structmap__root.html#o5">key</a> = NULL; +00112 <span class="keywordflow">if</span> (map->create) { +00113 map->create = 0; +00114 map->key = NULL; 00115 <span class="keywordflow">return</span>; 00116 } 00117 -00118 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o5">key</a> == NULL) +00118 <span class="keywordflow">if</span> (map->key == NULL) 00119 <span class="keywordflow">return</span>; 00120 -00121 m = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-><a class="code" href="structmap__root.html#o5">key</a>; +00121 m = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map->key; 00122 00123 <span class="comment">/* remove node from old hash list */</span> 00124 hlist_del_init(&m-><a class="code" href="structmap__node.html#o1">hnode</a>); @@ -120,15 +120,15 @@ 00127 list_del(&m-><a class="code" href="structmap__node.html#o0">lnode</a>); 00128 00129 <span class="comment">/* remove any allocated string storage */</span> -00130 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)map-><a class="code" href="structmap__root.html#o5">key</a>); +00130 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)map->key); 00131 -00132 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o0">maxnum</a>) -00133 list_add(&m-><a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o4">pool</a>); +00132 <span class="keywordflow">if</span> (map->maxnum) +00133 list_add(&m-><a class="code" href="structmap__node.html#o0">lnode</a>, &map->pool); 00134 <span class="keywordflow">else</span> -00135 <a class="code" href="alloc_8h.html#a5">_stp_free</a>(m); +00135 <a class="code" href="alloc_8h.html#a6">_stp_free</a>(m); 00136 -00137 map-><a class="code" href="structmap__root.html#o5">key</a> = NULL; -00138 map-><a class="code" href="structmap__root.html#o1">num</a>--; +00137 map->key = NULL; +00138 map->num--; 00139 } 00140 <a name="l00149"></a><a class="code" href="map_8c.html#a6">00149</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *<a class="code" href="map_8c.html#a6">_stp_map_start</a>(<a class="code" href="structmap__root.html">MAP</a> map) @@ -136,12 +136,12 @@ 00151 <span class="keywordflow">if</span> (map == NULL) 00152 <span class="keywordflow">return</span> NULL; 00153 -00154 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o3">head</a>.next); +00154 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o4">head</a>.next); 00155 -00156 <span class="keywordflow">if</span> (list_empty(&map-><a class="code" href="structmap__root.html#o3">head</a>)) +00156 <span class="keywordflow">if</span> (list_empty(&map-><a class="code" href="structmap__root.html#o4">head</a>)) 00157 <span class="keywordflow">return</span> NULL; 00158 -00159 <span class="keywordflow">return</span> (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-><a class="code" href="structmap__root.html#o3">head</a>.next; +00159 <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)map-><a class="code" href="structmap__root.html#o4">head</a>.next; 00160 } 00161 <a name="l00172"></a><a class="code" href="map_8c.html#a7">00172</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *<a class="code" href="map_8c.html#a7">_stp_map_iter</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *m) @@ -149,12 +149,12 @@ 00174 <span class="keywordflow">if</span> (map == NULL) 00175 <span class="keywordflow">return</span> NULL; 00176 -00177 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx next=%lx prev=%lx map->head.next=%lx\n"</span>, (<span class="keywordtype">long</span>)m, (<span class="keywordtype">long</span>)m-><a class="code" href="structmap__node.html#o0">lnode</a>.next, (<span class="keywordtype">long</span>)m-><a class="code" href="structmap__node.html#o0">lnode</a>.prev, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o3">head</a>.next); +00177 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx next=%lx prev=%lx map->head.next=%lx\n"</span>, (<span class="keywordtype">long</span>)m, (<span class="keywordtype">long</span>)m->lnode.next, (<span class="keywordtype">long</span>)m->lnode.prev, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o4">head</a>.next); 00178 -00179 <span class="keywordflow">if</span> (m->lnode.next == &map-><a class="code" href="structmap__root.html#o3">head</a>) +00179 <span class="keywordflow">if</span> (m->lnode.next == &map-><a class="code" href="structmap__root.html#o4">head</a>) 00180 <span class="keywordflow">return</span> NULL; 00181 -00182 <span class="keywordflow">return</span> (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)m-><a class="code" href="structmap__node.html#o0">lnode</a>.next; +00182 <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m-><a class="code" href="structmap__node.html#o0">lnode</a>.next; 00183 } 00184 <a name="l00190"></a><a class="code" href="map_8c.html#a8">00190</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a8">_stp_map_del</a>(<a class="code" href="structmap__root.html">MAP</a> map) @@ -162,15 +162,15 @@ 00192 <span class="keywordflow">if</span> (map == NULL) 00193 <span class="keywordflow">return</span>; 00194 -00195 <span class="keywordflow">if</span> (!list_empty(&map-><a class="code" href="structmap__root.html#o3">head</a>)) { -00196 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-><a class="code" href="structmap__root.html#o3">head</a>.next; -00197 <span class="keywordflow">while</span> (ptr && ptr != (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)&map-><a class="code" href="structmap__root.html#o3">head</a>) { +00195 <span class="keywordflow">if</span> (!list_empty(&map-><a class="code" href="structmap__root.html#o4">head</a>)) { +00196 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-><a class="code" href="structmap__root.html#o4">head</a>.next; +00197 <span class="keywordflow">while</span> (ptr && ptr != (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)&map-><a class="code" href="structmap__root.html#o4">head</a>) { 00198 map_free_strings(map, ptr); 00199 ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)ptr-><a class="code" href="structmap__node.html#o0">lnode</a>.next; 00200 } 00201 } -00202 <a class="code" href="alloc_8h.html#a6">_stp_vfree</a>(map-><a class="code" href="structmap__root.html#o11">membuf</a>); -00203 <a class="code" href="alloc_8h.html#a6">_stp_vfree</a>(map); +00202 <a class="code" href="alloc_8h.html#a7">_stp_vfree</a>(map-><a class="code" href="structmap__root.html#o14">membuf</a>); +00203 <a class="code" href="alloc_8h.html#a7">_stp_vfree</a>(map); 00204 } 00205 00206 <span class="comment">/********************** KEY FUNCTIONS *********************/</span> @@ -186,7 +186,7 @@ 00225 <span class="keywordflow">return</span>; 00226 00227 hv = hash_long(key1 ^ key2, HASH_TABLE_BITS); -00228 head = &map-><a class="code" href="structmap__root.html#o10">hashes</a>[hv]; +00228 head = &map-><a class="code" href="structmap__root.html#o13">hashes</a>[hv]; 00229 00230 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"hash for %ld,%ld is %d\n"</span>, key1, key2, hv); 00231 @@ -195,19 +195,19 @@ 00234 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node)); 00235 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"n =%lx key=%ld,%ld\n"</span>, (<span class="keywordtype">long</span>)n, n-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>, n->key2.<a class="code" href="unionkey__data.html#o0">val</a>); 00236 <span class="keywordflow">if</span> (key1 == n->key1.val && key2 == n->key2.val) { -00237 map-><a class="code" href="structmap__root.html#o5">key</a> = n; -00238 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00239 map-><a class="code" href="structmap__root.html#o6">create</a> = 0; +00237 map-><a class="code" href="structmap__root.html#o6">key</a> = n; +00238 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00239 map-><a class="code" href="structmap__root.html#o7">create</a> = 0; 00240 <span class="keywordflow">return</span>; 00241 } 00242 } 00243 -00244 map-><a class="code" href="structmap__root.html#o8">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key1; -00245 map-><a class="code" href="structmap__root.html#o9">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key2; -00246 map->c_key1type = LONG; -00247 map->c_key2type = LONG; -00248 map-><a class="code" href="structmap__root.html#o7">c_keyhead</a> = head; -00249 map-><a class="code" href="structmap__root.html#o6">create</a> = 1; +00244 map-><a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key1; +00245 map-><a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key2; +00246 map-><a class="code" href="structmap__root.html#o8">c_key1type</a> = <a class="code" href="map_8h.html#a18a12">LONG</a>; +00247 map-><a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a12">LONG</a>; +00248 map-><a class="code" href="structmap__root.html#o10">c_keyhead</a> = head; +00249 map-><a class="code" href="structmap__root.html#o7">create</a> = 1; 00250 } 00251 <a name="l00261"></a><a class="code" href="map_8c.html#a10">00261</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a10">_stp_map_key_str_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key1, <span class="keywordtype">char</span> *key2) @@ -220,12 +220,12 @@ 00268 <span class="keywordflow">return</span>; 00269 00270 <span class="keywordflow">if</span> (key1 == NULL) { -00271 map-><a class="code" href="structmap__root.html#o5">key</a> = NULL; +00271 map-><a class="code" href="structmap__root.html#o6">key</a> = NULL; 00272 <span class="keywordflow">return</span>; 00273 } 00274 00275 hv = string_hash(key1, key2); -00276 head = &map-><a class="code" href="structmap__root.html#o10">hashes</a>[hv]; +00276 head = &map-><a class="code" href="structmap__root.html#o13">hashes</a>[hv]; 00277 00278 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"hash for %s,%s is %d\n"</span>, key1, key2, hv); 00279 @@ -235,19 +235,19 @@ 00283 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"e =%lx key=%s,%s\n"</span>, (<span class="keywordtype">long</span>)e, n-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>,n-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>); 00284 <span class="keywordflow">if</span> (strcmp(key1, n-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0 00285 && (key2 == NULL || strcmp(key2, n-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0)) { -00286 map-><a class="code" href="structmap__root.html#o5">key</a> = n; -00287 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00288 map-><a class="code" href="structmap__root.html#o6">create</a> = 0; +00286 map-><a class="code" href="structmap__root.html#o6">key</a> = n; +00287 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00288 map-><a class="code" href="structmap__root.html#o7">create</a> = 0; 00289 <span class="keywordflow">return</span>; 00290 } 00291 } 00292 -00293 map-><a class="code" href="structmap__root.html#o8">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key1; -00294 map-><a class="code" href="structmap__root.html#o9">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key2; -00295 map->c_key1type = STR; -00296 map->c_key2type = STR; -00297 map-><a class="code" href="structmap__root.html#o7">c_keyhead</a> = head; -00298 map-><a class="code" href="structmap__root.html#o6">create</a> = 1; +00293 map-><a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key1; +00294 map-><a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key2; +00295 map-><a class="code" href="structmap__root.html#o8">c_key1type</a> = <a class="code" href="map_8h.html#a18a13">STR</a>; +00296 map-><a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a13">STR</a>; +00297 map-><a class="code" href="structmap__root.html#o10">c_keyhead</a> = head; +00298 map-><a class="code" href="structmap__root.html#o7">create</a> = 1; 00299 } 00300 <a name="l00310"></a><a class="code" href="map_8c.html#a11">00310</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a11">_stp_map_key_str_long</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key1, <span class="keywordtype">long</span> key2) @@ -260,12 +260,12 @@ 00317 <span class="keywordflow">return</span>; 00318 00319 <span class="keywordflow">if</span> (key1 == NULL) { -00320 map-><a class="code" href="structmap__root.html#o5">key</a> = NULL; +00320 map-><a class="code" href="structmap__root.html#o6">key</a> = NULL; 00321 <span class="keywordflow">return</span>; 00322 } 00323 00324 hv = mixed_hash(key1, key2); -00325 head = &map-><a class="code" href="structmap__root.html#o10">hashes</a>[hv]; +00325 head = &map-><a class="code" href="structmap__root.html#o13">hashes</a>[hv]; 00326 00327 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"hash for %s,%ld is %d\n"</span>, key1, key2, hv); 00328 @@ -274,19 +274,19 @@ 00331 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node)); 00332 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"e =%lx key=%s,%ld\n"</span>, (<span class="keywordtype">long</span>)e, n-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>,(<span class="keywordtype">long</span>)n-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>); 00333 <span class="keywordflow">if</span> (strcmp(key1, n-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0 && key2 == n-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>) { -00334 map-><a class="code" href="structmap__root.html#o5">key</a> = n; -00335 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00336 map-><a class="code" href="structmap__root.html#o6">create</a> = 0; +00334 map-><a class="code" href="structmap__root.html#o6">key</a> = n; +00335 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00336 map-><a class="code" href="structmap__root.html#o7">create</a> = 0; 00337 <span class="keywordflow">return</span>; 00338 } 00339 } 00340 -00341 map-><a class="code" href="structmap__root.html#o8">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key1; -00342 map-><a class="code" href="structmap__root.html#o9">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key2; -00343 map->c_key1type = STR; -00344 map->c_key2type = LONG; -00345 map-><a class="code" href="structmap__root.html#o7">c_keyhead</a> = head; -00346 map-><a class="code" href="structmap__root.html#o6">create</a> = 1; +00341 map-><a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key1; +00342 map-><a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key2; +00343 map-><a class="code" href="structmap__root.html#o8">c_key1type</a> = <a class="code" href="map_8h.html#a18a13">STR</a>; +00344 map-><a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a12">LONG</a>; +00345 map-><a class="code" href="structmap__root.html#o10">c_keyhead</a> = head; +00346 map-><a class="code" href="structmap__root.html#o7">create</a> = 1; 00347 } 00348 <a name="l00358"></a><a class="code" href="map_8c.html#a12">00358</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a12">_stp_map_key_long_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">long</span> key1, <span class="keywordtype">char</span> *key2) @@ -299,7 +299,7 @@ 00365 <span class="keywordflow">return</span>; 00366 00367 hv = mixed_hash(key2, key1); -00368 head = &map-><a class="code" href="structmap__root.html#o10">hashes</a>[hv]; +00368 head = &map-><a class="code" href="structmap__root.html#o13">hashes</a>[hv]; 00369 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"hash for %ld,%s is %d\n"</span>, key1, key2, hv); 00370 00371 hlist_for_each(e, head) { @@ -307,19 +307,19 @@ 00373 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node)); 00374 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"e =%lx key=%ld,%s\n"</span>, (<span class="keywordtype">long</span>)e, n-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>,n-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>); 00375 <span class="keywordflow">if</span> (key1 == n-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> && strcmp(key2, n-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0) { -00376 map-><a class="code" href="structmap__root.html#o5">key</a> = n; -00377 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00378 map-><a class="code" href="structmap__root.html#o6">create</a> = 0; +00376 map-><a class="code" href="structmap__root.html#o6">key</a> = n; +00377 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00378 map-><a class="code" href="structmap__root.html#o7">create</a> = 0; 00379 <span class="keywordflow">return</span>; 00380 } 00381 } 00382 -00383 map-><a class="code" href="structmap__root.html#o8">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key1; -00384 map-><a class="code" href="structmap__root.html#o9">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key2; -00385 map->c_key1type = LONG; -00386 map->c_key2type = STR; -00387 map-><a class="code" href="structmap__root.html#o7">c_keyhead</a> = head; -00388 map-><a class="code" href="structmap__root.html#o6">create</a> = 1; +00383 map-><a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key1; +00384 map-><a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key2; +00385 map-><a class="code" href="structmap__root.html#o8">c_key1type</a> = <a class="code" href="map_8h.html#a18a12">LONG</a>; +00386 map-><a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a13">STR</a>; +00387 map-><a class="code" href="structmap__root.html#o10">c_keyhead</a> = head; +00388 map-><a class="code" href="structmap__root.html#o7">create</a> = 1; 00389 } 00390 <a name="l00399"></a><a class="code" href="map_8c.html#a13">00399</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a13">_stp_map_key_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key) @@ -327,7 +327,7 @@ 00401 <span class="keywordflow">if</span> (map == NULL) 00402 <span class="keywordflow">return</span>; 00403 <a class="code" href="map_8c.html#a10">_stp_map_key_str_str</a>(map, key, NULL); -00404 map->c_key2type = NONE; +00404 map-><a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a11">NONE</a>; 00405 } 00406 <a name="l00415"></a><a class="code" href="map_8c.html#a14">00415</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">long</span> key) @@ -335,327 +335,341 @@ 00417 <span class="keywordflow">if</span> (map == NULL) 00418 <span class="keywordflow">return</span>; 00419 <a class="code" href="map_8c.html#a9">_stp_map_key_long_long</a>(map, key, 0); -00420 map->c_key2type = NONE; +00420 map-><a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a11">NONE</a>; 00421 } 00422 00423 <span class="comment">/********************** SET/GET VALUES *********************/</span> 00424 00425 <span class="keyword">static</span> <span class="keywordtype">void</span> map_copy_keys(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *m) 00426 { -00427 m->key1type = map->c_key1type; -00428 m->key2type = map->c_key2type; -00429 <span class="keywordflow">switch</span> (map->c_key1type) { +00427 m->key1type = map-><a class="code" href="structmap__root.html#o8">c_key1type</a>; +00428 m->key2type = map-><a class="code" href="structmap__root.html#o9">c_key2type</a>; +00429 <span class="keywordflow">switch</span> (map-><a class="code" href="structmap__root.html#o8">c_key1type</a>) { 00430 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a13">STR</a>: -00431 m-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = <a class="code" href="alloc_8h.html#a2">_stp_alloc</a>(strlen(map-><a class="code" href="structmap__root.html#o8">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) + 1); -00432 strcpy(m-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>, map-><a class="code" href="structmap__root.html#o8">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>); +00431 m->key1.str = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(strlen(map-><a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) + 1); +00432 strcpy(m->key1.str, map-><a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>); 00433 <span class="keywordflow">break</span>; 00434 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a12">LONG</a>: -00435 m-><a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = map-><a class="code" href="structmap__root.html#o8">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>; +00435 m->key1.val = map-><a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>; 00436 <span class="keywordflow">break</span>; 00437 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a11">NONE</a>: 00438 <span class="comment">/* ERROR */</span> 00439 <span class="keywordflow">break</span>; 00440 } -00441 <span class="keywordflow">switch</span> (map->c_key2type) { +00441 <span class="keywordflow">switch</span> (map-><a class="code" href="structmap__root.html#o9">c_key2type</a>) { 00442 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a13">STR</a>: -00443 m-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = <a class="code" href="alloc_8h.html#a2">_stp_alloc</a>(strlen(map-><a class="code" href="structmap__root.html#o9">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) + 1); -00444 strcpy(m-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>, map-><a class="code" href="structmap__root.html#o9">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>); +00443 m->key2.<a class="code" href="unionkey__data.html#o1">str</a> = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(strlen(map-><a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) + 1); +00444 strcpy(m->key2.str, map-><a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>); 00445 <span class="keywordflow">break</span>; 00446 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a12">LONG</a>: -00447 m-><a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = map-><a class="code" href="structmap__root.html#o9">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>; +00447 m->key2.<a class="code" href="unionkey__data.html#o0">val</a> = map-><a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>; 00448 <span class="keywordflow">break</span>; 00449 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a11">NONE</a>: 00450 <span class="keywordflow">break</span>; 00451 } 00452 00453 <span class="comment">/* add node to new hash list */</span> -00454 hlist_add_head(&m-><a class="code" href="structmap__node.html#o1">hnode</a>, map-><a class="code" href="structmap__root.html#o7">c_keyhead</a>); +00454 hlist_add_head(&m->hnode, map-><a class="code" href="structmap__root.html#o10">c_keyhead</a>); 00455 -00456 map-><a class="code" href="structmap__root.html#o5">key</a> = m; -00457 map-><a class="code" href="structmap__root.html#o6">create</a> = 0; -00458 map-><a class="code" href="structmap__root.html#o1">num</a>++; +00456 map-><a class="code" href="structmap__root.html#o6">key</a> = m; +00457 map-><a class="code" href="structmap__root.html#o7">create</a> = 0; +00458 map-><a class="code" href="structmap__root.html#o2">num</a>++; 00459 } 00460 -<a name="l00471"></a><a class="code" href="map_8c.html#a16">00471</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a16">_stp_map_set_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val) -00472 { -00473 <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *m; -00474 -00475 <span class="keywordflow">if</span> (map == NULL) -00476 <span class="keywordflow">return</span>; -00477 -00478 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">create</a>) { -00479 <span class="keywordflow">if</span> (val == 0) -00480 <span class="keywordflow">return</span>; -00481 -00482 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o0">maxnum</a>) { -00483 <span class="keywordflow">if</span> (list_empty(&map-><a class="code" href="structmap__root.html#o4">pool</a>)) { -00484 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o2">no_wrap</a>) { -00485 <span class="comment">/* ERROR. FIXME */</span> -00486 <span class="keywordflow">return</span>; -00487 } -00488 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-><a class="code" href="structmap__root.html#o3">head</a>.next; -00489 hlist_del_init(&m-><a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>); -00490 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m); -00491 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m); -00492 } <span class="keywordflow">else</span> { -00493 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-><a class="code" href="structmap__root.html#o4">pool</a>.next; -00494 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m); -00495 } -00496 list_move_tail(&m-><a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o3">head</a>); -00497 } <span class="keywordflow">else</span> { -00498 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *) -00499 <a class="code" href="alloc_8h.html#a3">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structmap__node__int64.html">map_node_int64</a>)); -00500 <span class="comment">/* add node to list */</span> -00501 list_add_tail(&m-><a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o3">head</a>); -00502 } -00503 -00504 <span class="comment">/* copy the key(s) */</span> -00505 map_copy_keys(map, &m-><a class="code" href="structmap__node__int64.html#o0">n</a>); -00506 -00507 <span class="comment">/* set the value */</span> -00508 m-><a class="code" href="structmap__node__int64.html#o1">val</a> = val; -00509 } <span class="keywordflow">else</span> { -00510 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o5">key</a> == NULL) -00511 <span class="keywordflow">return</span>; -00512 -00513 <span class="keywordflow">if</span> (val) { -00514 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-><a class="code" href="structmap__root.html#o5">key</a>; -00515 m-><a class="code" href="structmap__node__int64.html#o1">val</a> = val; -00516 } <span class="keywordflow">else</span> { -00517 <span class="comment">/* setting value to 0 is the same as deleting */</span> -00518 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map); -00519 } -00520 } -00521 } -00522 -<a name="l00528"></a><a class="code" href="map_8c.html#a17">00528</a> int64_t <a class="code" href="map_8c.html#a17">_stp_map_get_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map) -00529 { -00530 <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *m; -00531 <span class="keywordflow">if</span> (map == NULL || map-><a class="code" href="structmap__root.html#o6">create</a> || map-><a class="code" href="structmap__root.html#o5">key</a> == NULL) -00532 <span class="keywordflow">return</span> 0; -00533 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00534 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-><a class="code" href="structmap__root.html#o5">key</a>; -00535 <span class="keywordflow">return</span> m-><a class="code" href="structmap__node__int64.html#o1">val</a>; -00536 } -00537 -<a name="l00548"></a><a class="code" href="map_8c.html#a18">00548</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a18">_stp_map_set_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *val) -00549 { -00550 <span class="keyword">struct </span>map_node_str *m; -00551 -00552 <span class="keywordflow">if</span> (map == NULL) -00553 <span class="keywordflow">return</span>; -00554 -00555 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">create</a>) { -00556 <span class="keywordflow">if</span> (val == NULL) -00557 <span class="keywordflow">return</span>; -00558 -00559 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o0">maxnum</a>) { -00560 <span class="keywordflow">if</span> (list_empty(&map-><a class="code" href="structmap__root.html#o4">pool</a>)) { -00561 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o2">no_wrap</a>) { -00562 <span class="comment">/* ERROR. FIXME */</span> -00563 <span class="keywordflow">return</span>; -00564 } -00565 m = (<span class="keyword">struct </span>map_node_str *)map-><a class="code" href="structmap__root.html#o3">head</a>.next; -00566 hlist_del_init(&m-><a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>); -00567 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m); -00568 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m); -00569 } <span class="keywordflow">else</span> { -00570 m = (<span class="keyword">struct </span>map_node_str *)map-><a class="code" href="structmap__root.html#o4">pool</a>.next; -00571 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m); -00572 } -00573 list_move_tail(&m-><a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o3">head</a>); -00574 } <span class="keywordflow">else</span> { -00575 m = (<span class="keyword">struct </span>map_node_str *) -00576 <a class="code" href="alloc_8h.html#a3">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_str)); -00577 <span class="comment">/* add node to list */</span> -00578 list_add_tail(&m-><a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o3">head</a>); -00579 } -00580 -00581 <span class="comment">/* copy the key(s) */</span> -00582 map_copy_keys(map, &m-><a class="code" href="structmap__node__str.html#o0">n</a>); -00583 -00584 <span class="comment">/* set the value */</span> -00585 m-><a class="code" href="structmap__node__str.html#o1">str</a> = <a class="code" href="alloc_8h.html#a2">_stp_alloc</a>(strlen(val) + 1); -00586 strcpy(m-><a class="code" href="structmap__node__str.html#o1">str</a>, val); -00587 } <span class="keywordflow">else</span> { -00588 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o5">key</a> == NULL) -00589 <span class="keywordflow">return</span>; -00590 -00591 <span class="keywordflow">if</span> (val) { -00592 m = (<span class="keyword">struct </span>map_node_str *)map-><a class="code" href="structmap__root.html#o5">key</a>; -00593 <span class="keywordflow">if</span> (m-><a class="code" href="structmap__node__str.html#o1">str</a>) -00594 <a class="code" href="alloc_8h.html#a5">_stp_free</a>(m-><a class="code" href="structmap__node__str.html#o1">str</a>); -00595 m-><a class="code" href="structmap__node__str.html#o1">str</a> = <a class="code" href="alloc_8h.html#a2">_stp_alloc</a>(strlen(val) + 1); -00596 strcpy(m-><a class="code" href="structmap__node__str.html#o1">str</a>, val); +00461 <span class="keyword">static</span> <span class="keywordtype">void</span> __stp_map_set_int64(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val, <span class="keywordtype">int</span> add) +00462 { +00463 <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *m; +00464 +00465 <span class="keywordflow">if</span> (map == NULL) +00466 return; +00467 +00468 if (map->create) { +00469 <span class="keywordflow">if</span> (val == 0) +00470 return; +00471 +00472 if (map->maxnum) { +00473 <span class="keywordflow">if</span> (list_empty(&map-><a class="code" href="structmap__root.html#o5">pool</a>)) { +00474 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o3">no_wrap</a>) { +00475 <span class="comment">/* ERROR. FIXME */</span> +00476 <span class="keywordflow">return</span>; +00477 } +00478 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-><a class="code" href="structmap__root.html#o4">head</a>.next; +00479 hlist_del_init(&m-><a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>); +00480 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m); +00481 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m); +00482 } <span class="keywordflow">else</span> { +00483 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-><a class="code" href="structmap__root.html#o5">pool</a>.next; +00484 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m); +00485 } +00486 list_move_tail(&m-><a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o4">head</a>); +00487 } <span class="keywordflow">else</span> { +00488 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *) +00489 <a class="code" href="alloc_8h.html#a4">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structmap__node__int64.html">map_node_int64</a>)); +00490 <span class="comment">/* add node to list */</span> +00491 list_add_tail(&m-><a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o4">head</a>); +00492 } +00493 +00494 <span class="comment">/* copy the key(s) */</span> +00495 map_copy_keys(map, &m-><a class="code" href="structmap__node__int64.html#o0">n</a>); +00496 +00497 <span class="comment">/* set the value */</span> +00498 m-><a class="code" href="structmap__node__int64.html#o1">val</a> = val; +00499 } <span class="keywordflow">else</span> { +00500 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">key</a> == NULL) +00501 return; +00502 +00503 if (val) { +00504 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-><a class="code" href="structmap__root.html#o6">key</a>; +00505 <span class="keywordflow">if</span> (add) +00506 m->val += val; +00507 else +00508 m->val = val; +00509 } else if (!add) { +00510 <span class="comment">/* setting value to 0 is the same as deleting */</span> +00511 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map); +00512 } +00513 } +00514 } +00515 +<a name="l00525"></a><a class="code" href="map_8c.html#a17">00525</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a17">_stp_map_set_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val) +00526 { +00527 __stp_map_set_int64 (map, val, 0); +00528 } +00529 +00530 +<a name="l00541"></a><a class="code" href="map_8c.html#a18">00541</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a18">_stp_map_add_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val) +00542 { +00543 __stp_map_set_int64 (map, val, 1); +00544 } +00545 +<a name="l00551"></a><a class="code" href="map_8c.html#a19">00551</a> int64_t <a class="code" href="map_8c.html#a19">_stp_map_get_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map) +00552 { +00553 <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *m; +00554 <span class="keywordflow">if</span> (map == NULL || map-><a class="code" href="structmap__root.html#o7">create</a> || map-><a class="code" href="structmap__root.html#o6">key</a> == NULL) +00555 <span class="keywordflow">return</span> 0; +00556 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00557 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-><a class="code" href="structmap__root.html#o6">key</a>; +00558 <span class="keywordflow">return</span> m-><a class="code" href="structmap__node__int64.html#o1">val</a>; +00559 } +00560 +<a name="l00571"></a><a class="code" href="map_8c.html#a20">00571</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a20">_stp_map_set_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *val) +00572 { +00573 <span class="keyword">struct </span>map_node_str *m; +00574 +00575 <span class="keywordflow">if</span> (map == NULL) +00576 <span class="keywordflow">return</span>; +00577 +00578 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o7">create</a>) { +00579 <span class="keywordflow">if</span> (val == NULL) +00580 <span class="keywordflow">return</span>; +00581 +00582 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o1">maxnum</a>) { +00583 <span class="keywordflow">if</span> (list_empty(&map-><a class="code" href="structmap__root.html#o5">pool</a>)) { +00584 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o3">no_wrap</a>) { +00585 <span class="comment">/* ERROR. FIXME */</span> +00586 <span class="keywordflow">return</span>; +00587 } +00588 m = (<span class="keyword">struct </span>map_node_str *)map-><a class="code" href="structmap__root.html#o4">head</a>.next; +00589 hlist_del_init(&m-><a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>); +00590 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m); +00591 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m); +00592 } <span class="keywordflow">else</span> { +00593 m = (<span class="keyword">struct </span>map_node_str *)map-><a class="code" href="structmap__root.html#o5">pool</a>.next; +00594 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m); +00595 } +00596 list_move_tail(&m-><a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o4">head</a>); 00597 } <span class="keywordflow">else</span> { -00598 <span class="comment">/* setting value to 0 is the same as deleting */</span> -00599 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map); -00600 } -00601 } -00602 } +00598 m = (<span class="keyword">struct </span>map_node_str *) +00599 <a class="code" href="alloc_8h.html#a4">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_str)); +00600 <span class="comment">/* add node to list */</span> +00601 list_add_tail(&m-><a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o4">head</a>); +00602 } 00603 -<a name="l00609"></a><a class="code" href="map_8c.html#a19">00609</a> <span class="keywordtype">char</span> *<a class="code" href="map_8c.html#a19">_stp_map_get_str</a>(<a class="code" href="structmap__root.html">MAP</a> map) -00610 { -00611 <span class="keyword">struct </span>map_node_str *m; -00612 <span class="keywordflow">if</span> (map == NULL || map-><a class="code" href="structmap__root.html#o6">create</a> || map-><a class="code" href="structmap__root.html#o5">key</a> == NULL) -00613 <span class="keywordflow">return</span> NULL; -00614 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00615 m = (<span class="keyword">struct </span>map_node_str *)map-><a class="code" href="structmap__root.html#o5">key</a>; -00616 <span class="keywordflow">return</span> m-><a class="code" href="structmap__node__str.html#o1">str</a>; -00617 } -00618 -<a name="l00633"></a><a class="code" href="map_8c.html#a20">00633</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a20">_stp_map_set_stat</a>(<a class="code" href="structmap__root.html">MAP</a> map, <a class="code" href="structstat.html">stat</a> * stats) -00634 { -00635 <span class="keyword">struct </span>map_node_stat *m; -00636 -00637 <span class="keywordflow">if</span> (map == NULL) -00638 <span class="keywordflow">return</span>; -00639 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"set_stat %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00640 -00641 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">create</a>) { -00642 <span class="keywordflow">if</span> (stats == NULL) -00643 <span class="keywordflow">return</span>; -00644 -00645 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o0">maxnum</a>) { -00646 <span class="keywordflow">if</span> (list_empty(&map-><a class="code" href="structmap__root.html#o4">pool</a>)) { -00647 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o2">no_wrap</a>) { -00648 <span class="comment">/* ERROR. FIXME */</span> -00649 <span class="keywordflow">return</span>; -00650 } -00651 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o3">head</a>.next; -00652 hlist_del_init(&m-><a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>); -00653 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m); -00654 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m); -00655 } <span class="keywordflow">else</span> { -00656 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o4">pool</a>.next; -00657 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m); -00658 } -00659 list_move_tail(&m-><a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o3">head</a>); -00660 } <span class="keywordflow">else</span> { -00661 m = (<span class="keyword">struct </span>map_node_stat *) -00662 <a class="code" href="alloc_8h.html#a3">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_stat)); -00663 <span class="comment">/* add node to list */</span> -00664 list_add_tail(&m-><a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o3">head</a>); -00665 } -00666 -00667 <span class="comment">/* copy the key(s) */</span> -00668 map_copy_keys(map, &m-><a class="code" href="structmap__node__stat.html#o0">n</a>); -00669 -00670 <span class="comment">/* set the value */</span> -00671 memcpy(&m-><a class="code" href="structmap__node__stat.html#o1">stats</a>, stats, <span class="keyword">sizeof</span>(<a class="code" href="structstat.html">stat</a>)); -00672 } <span class="keywordflow">else</span> { -00673 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o5">key</a> == NULL) -00674 <span class="keywordflow">return</span>; -00675 -00676 <span class="keywordflow">if</span> (stats) { -00677 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o5">key</a>; -00678 memcpy(&m-><a class="code" href="structmap__node__stat.html#o1">stats</a>, stats, <span class="keyword">sizeof</span>(<a class="code" href="structstat.html">stat</a>)); -00679 } <span class="keywordflow">else</span> { -00680 <span class="comment">/* setting value to NULL is the same as deleting */</span> -00681 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map); -00682 } -00683 } -00684 } -00685 -<a name="l00692"></a><a class="code" href="map_8c.html#a21">00692</a> <a class="code" href="structstat.html">stat</a> *<a class="code" href="map_8c.html#a21">_stp_map_get_stat</a>(<a class="code" href="structmap__root.html">MAP</a> map) -00693 { -00694 <span class="keyword">struct </span>map_node_stat *m; -00695 <span class="keywordflow">if</span> (map == NULL || map-><a class="code" href="structmap__root.html#o6">create</a> || map-><a class="code" href="structmap__root.html#o5">key</a> == NULL) -00696 <span class="keywordflow">return</span> NULL; -00697 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00698 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o5">key</a>; -00699 <span class="keywordflow">return</span> &m-><a class="code" href="structmap__node__stat.html#o1">stats</a>; -00700 } -00701 -<a name="l00713"></a><a class="code" href="map_8c.html#a22">00713</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a22">_stp_map_stat_add</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val) -00714 { -00715 <span class="keyword">struct </span>map_node_stat *m; -00716 <span class="keywordflow">if</span> (map == NULL) -00717 <span class="keywordflow">return</span>; -00718 -00719 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">create</a>) { -00720 <a class="code" href="structstat.html">stat</a> st = { 1, val, val, val }; -00721 <span class="comment">/* histogram */</span> -00722 <a class="code" href="map_8c.html#a20">_stp_map_set_stat</a>(map, &st); -00723 <span class="keywordflow">return</span>; -00724 } -00725 -00726 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o5">key</a> == NULL) -00727 <span class="keywordflow">return</span>; -00728 -00729 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"add_stat %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o5">key</a>); -00730 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o5">key</a>; -00731 m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o0">count</a>++; -00732 m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o1">sum</a> += val; -00733 <span class="keywordflow">if</span> (val > m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o3">max</a>) -00734 m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o3">max</a> = val; -00735 <span class="keywordflow">if</span> (val < m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o2">min</a>) -00736 m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o2">min</a> = val; -00737 <span class="comment">/* histogram */</span> -00738 } -00739 -00740 <span class="comment">/********************** List Functions *********************/</span> +00604 <span class="comment">/* copy the key(s) */</span> +00605 map_copy_keys(map, &m-><a class="code" href="structmap__node__str.html#o0">n</a>); +00606 +00607 <span class="comment">/* set the value */</span> +00608 m-><a class="code" href="structmap__node__str.html#o1">str</a> = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(strlen(val) + 1); +00609 strcpy(m-><a class="code" href="structmap__node__str.html#o1">str</a>, val); +00610 } <span class="keywordflow">else</span> { +00611 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">key</a> == NULL) +00612 <span class="keywordflow">return</span>; +00613 +00614 <span class="keywordflow">if</span> (val) { +00615 m = (<span class="keyword">struct </span>map_node_str *)map-><a class="code" href="structmap__root.html#o6">key</a>; +00616 <span class="keywordflow">if</span> (m-><a class="code" href="structmap__node__str.html#o1">str</a>) +00617 <a class="code" href="alloc_8h.html#a6">_stp_free</a>(m-><a class="code" href="structmap__node__str.html#o1">str</a>); +00618 m-><a class="code" href="structmap__node__str.html#o1">str</a> = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(strlen(val) + 1); +00619 strcpy(m-><a class="code" href="structmap__node__str.html#o1">str</a>, val); +00620 } <span class="keywordflow">else</span> { +00621 <span class="comment">/* setting value to 0 is the same as deleting */</span> +00622 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map); +00623 } +00624 } +00625 } +00626 +<a name="l00632"></a><a class="code" href="map_8c.html#a21">00632</a> <span class="keywordtype">char</span> *<a class="code" href="map_8c.html#a21">_stp_map_get_str</a>(<a class="code" href="structmap__root.html">MAP</a> map) +00633 { +00634 <span class="keyword">struct </span>map_node_str *m; +00635 <span class="keywordflow">if</span> (map == NULL || map-><a class="code" href="structmap__root.html#o7">create</a> || map-><a class="code" href="structmap__root.html#o6">key</a> == NULL) +00636 <span class="keywordflow">return</span> NULL; +00637 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00638 m = (<span class="keyword">struct </span>map_node_str *)map-><a class="code" href="structmap__root.html#o6">key</a>; +00639 <span class="keywordflow">return</span> m-><a class="code" href="structmap__node__str.html#o1">str</a>; +00640 } +00641 +<a name="l00656"></a><a class="code" href="map_8c.html#a22">00656</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a22">_stp_map_set_stat</a>(<a class="code" href="structmap__root.html">MAP</a> map, <a class="code" href="structstat.html">stat</a> * stats) +00657 { +00658 <span class="keyword">struct </span>map_node_stat *m; +00659 +00660 <span class="keywordflow">if</span> (map == NULL) +00661 <span class="keywordflow">return</span>; +00662 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"set_stat %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00663 +00664 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o7">create</a>) { +00665 <span class="keywordflow">if</span> (stats == NULL) +00666 <span class="keywordflow">return</span>; +00667 +00668 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o1">maxnum</a>) { +00669 <span class="keywordflow">if</span> (list_empty(&map-><a class="code" href="structmap__root.html#o5">pool</a>)) { +00670 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o3">no_wrap</a>) { +00671 <span class="comment">/* ERROR. FIXME */</span> +00672 <span class="keywordflow">return</span>; +00673 } +00674 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o4">head</a>.next; +00675 hlist_del_init(&m-><a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>); +00676 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m); +00677 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m); +00678 } <span class="keywordflow">else</span> { +00679 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o5">pool</a>.next; +00680 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m); +00681 } +00682 list_move_tail(&m-><a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o4">head</a>); +00683 } <span class="keywordflow">else</span> { +00684 m = (<span class="keyword">struct </span>map_node_stat *) +00685 <a class="code" href="alloc_8h.html#a4">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_stat)); +00686 <span class="comment">/* add node to list */</span> +00687 list_add_tail(&m-><a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o4">head</a>); +00688 } +00689 +00690 <span class="comment">/* copy the key(s) */</span> +00691 map_copy_keys(map, &m-><a class="code" href="structmap__node__stat.html#o0">n</a>); +00692 +00693 <span class="comment">/* set the value */</span> +00694 memcpy(&m-><a class="code" href="structmap__node__stat.html#o1">stats</a>, stats, <span class="keyword">sizeof</span>(<a class="code" href="structstat.html">stat</a>)); +00695 } <span class="keywordflow">else</span> { +00696 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">key</a> == NULL) +00697 <span class="keywordflow">return</span>; +00698 +00699 <span class="keywordflow">if</span> (stats) { +00700 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o6">key</a>; +00701 memcpy(&m-><a class="code" href="structmap__node__stat.html#o1">stats</a>, stats, <span class="keyword">sizeof</span>(<a class="code" href="structstat.html">stat</a>)); +00702 } <span class="keywordflow">else</span> { +00703 <span class="comment">/* setting value to NULL is the same as deleting */</span> +00704 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map); +00705 } +00706 } +00707 } +00708 +<a name="l00715"></a><a class="code" href="map_8c.html#a23">00715</a> <a class="code" href="structstat.html">stat</a> *<a class="code" href="map_8c.html#a23">_stp_map_get_stat</a>(<a class="code" href="structmap__root.html">MAP</a> map) +00716 { +00717 <span class="keyword">struct </span>map_node_stat *m; +00718 <span class="keywordflow">if</span> (map == NULL || map-><a class="code" href="structmap__root.html#o7">create</a> || map-><a class="code" href="structmap__root.html#o6">key</a> == NULL) +00719 <span class="keywordflow">return</span> NULL; +00720 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00721 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o6">key</a>; +00722 <span class="keywordflow">return</span> &m-><a class="code" href="structmap__node__stat.html#o1">stats</a>; +00723 } +00724 +<a name="l00736"></a><a class="code" href="map_8c.html#a24">00736</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a24">_stp_map_stat_add</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val) +00737 { +00738 <span class="keyword">struct </span>map_node_stat *m; +00739 <span class="keywordflow">if</span> (map == NULL) +00740 <span class="keywordflow">return</span>; 00741 -<a name="l00753"></a><a class="code" href="map_8c.html#a23">00753</a> <a class="code" href="structmap__root.html">MAP</a> <a class="code" href="map_8c.html#a23">_stp_list_new</a>(<span class="keywordtype">unsigned</span> max_entries, <span class="keyword">enum</span> valtype type) -00754 { -00755 <a class="code" href="structmap__root.html">MAP</a> map = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (max_entries, type); -00756 map-><a class="code" href="structmap__root.html#o2">no_wrap</a> = 1; -00757 <span class="keywordflow">return</span> map; -00758 } -00759 -<a name="l00765"></a><a class="code" href="map_8c.html#a24">00765</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a24">_stp_list_clear</a>(<a class="code" href="structmap__root.html">MAP</a> map) -00766 { -00767 <span class="keywordflow">if</span> (map == NULL) -00768 <span class="keywordflow">return</span>; -00769 -00770 <span class="keywordflow">if</span> (!list_empty(&map-><a class="code" href="structmap__root.html#o3">head</a>)) { -00771 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-><a class="code" href="structmap__root.html#o3">head</a>.next; -00772 -00773 <span class="keywordflow">while</span> (ptr && ptr != (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)&map-><a class="code" href="structmap__root.html#o3">head</a>) { -00774 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *next = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)ptr-><a class="code" href="structmap__node.html#o0">lnode</a>.next; -00775 -00776 <span class="comment">/* remove node from old hash list */</span> -00777 hlist_del_init(&ptr-><a class="code" href="structmap__node.html#o1">hnode</a>); -00778 -00779 <span class="comment">/* remove from entry list */</span> -00780 list_del(&ptr-><a class="code" href="structmap__node.html#o0">lnode</a>); -00781 -00782 <span class="comment">/* remove any allocated string storage */</span> -00783 map_free_strings(map, ptr); -00784 -00785 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o0">maxnum</a>) -00786 list_add(&ptr-><a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o4">pool</a>); -00787 <span class="keywordflow">else</span> -00788 <a class="code" href="alloc_8h.html#a5">_stp_free</a>(ptr); -00789 -00790 map-><a class="code" href="structmap__root.html#o1">num</a>--; -00791 ptr = next; -00792 } -00793 } -00794 -00795 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o1">num</a> != 0) { -00796 <a class="code" href="io_8c.html#a0">dlog</a> (<span class="stringliteral">"ERROR: list is supposed to be empty (has %d)\n"</span>, map-><a class="code" href="structmap__root.html#o1">num</a>); -00797 } -00798 } -00799 -<a name="l00805"></a><a class="code" href="map_8c.html#a25">00805</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a25">_stp_list_add_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *str) -00806 { -00807 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(map, map-><a class="code" href="structmap__root.html#o1">num</a>); -00808 <a class="code" href="map_8c.html#a18">_stp_map_set_str</a>(map, str); -00809 } -00810 -<a name="l00816"></a><a class="code" href="map_8c.html#a26">00816</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a26">_stp_list_add_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val) -00817 { -00818 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(map, map-><a class="code" href="structmap__root.html#o1">num</a>); -00819 <a class="code" href="map_8c.html#a16">_stp_map_set_int64</a>(map, val); -00820 } -00821 -<a name="l00827"></a><a class="code" href="map_8c.html#a27">00827</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="map_8c.html#a27">_stp_list_size</a>(<a class="code" href="structmap__root.html">MAP</a> map) -00828 { -00829 <span class="keywordflow">return</span> map-><a class="code" href="structmap__root.html#o1">num</a>; -00830 } -</pre></div><hr size="1"><address style="align: right;"><small>Generated on Wed Mar 9 13:21:28 2005 for SystemTap by +00742 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o7">create</a>) { +00743 <a class="code" href="structstat.html">stat</a> st = { 1, val, val, val }; +00744 <span class="comment">/* histogram */</span> +00745 <a class="code" href="map_8c.html#a22">_stp_map_set_stat</a>(map, &st); +00746 <span class="keywordflow">return</span>; +00747 } +00748 +00749 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o6">key</a> == NULL) +00750 <span class="keywordflow">return</span>; +00751 +00752 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"add_stat %lx\n"</span>, (<span class="keywordtype">long</span>)map-><a class="code" href="structmap__root.html#o6">key</a>); +00753 m = (<span class="keyword">struct </span>map_node_stat *)map-><a class="code" href="structmap__root.html#o6">key</a>; +00754 m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o0">count</a>++; +00755 m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o1">sum</a> += val; +00756 <span class="keywordflow">if</span> (val > m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o3">max</a>) +00757 m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o3">max</a> = val; +00758 <span class="keywordflow">if</span> (val < m->stats.min) +00759 m-><a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o2">min</a> = val; +00760 <span class="comment">/* histogram */</span> +00761 } +00762 +00763 <span class="comment">/********************** List Functions *********************/</span> +00764 +<a name="l00776"></a><a class="code" href="map_8c.html#a25">00776</a> <a class="code" href="structmap__root.html">MAP</a> <a class="code" href="map_8c.html#a25">_stp_list_new</a>(<span class="keywordtype">unsigned</span> max_entries, <span class="keyword">enum</span> valtype type) +00777 { +00778 <a class="code" href="structmap__root.html">MAP</a> map = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (max_entries, type); +00779 map-><a class="code" href="structmap__root.html#o3">no_wrap</a> = 1; +00780 <span class="keywordflow">return</span> map; +00781 } +00782 +<a name="l00788"></a><a class="code" href="map_8c.html#a26">00788</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a26">_stp_list_clear</a>(<a class="code" href="structmap__root.html">MAP</a> map) +00789 { +00790 <span class="keywordflow">if</span> (map == NULL) +00791 <span class="keywordflow">return</span>; +00792 +00793 <span class="keywordflow">if</span> (!list_empty(&map-><a class="code" href="structmap__root.html#o4">head</a>)) { +00794 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-><a class="code" href="structmap__root.html#o4">head</a>.next; +00795 +00796 <span class="keywordflow">while</span> (ptr && ptr != (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)&map-><a class="code" href="structmap__root.html#o4">head</a>) { +00797 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *next = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)ptr-><a class="code" href="structmap__node.html#o0">lnode</a>.next; +00798 +00799 <span class="comment">/* remove node from old hash list */</span> +00800 hlist_del_init(&ptr-><a class="code" href="structmap__node.html#o1">hnode</a>); +00801 +00802 <span class="comment">/* remove from entry list */</span> +00803 list_del(&ptr-><a class="code" href="structmap__node.html#o0">lnode</a>); +00804 +00805 <span class="comment">/* remove any allocated string storage */</span> +00806 map_free_strings(map, ptr); +00807 +00808 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o1">maxnum</a>) +00809 list_add(&ptr-><a class="code" href="structmap__node.html#o0">lnode</a>, &map-><a class="code" href="structmap__root.html#o5">pool</a>); +00810 <span class="keywordflow">else</span> +00811 <a class="code" href="alloc_8h.html#a6">_stp_free</a>(ptr); +00812 +00813 map-><a class="code" href="structmap__root.html#o2">num</a>--; +00814 ptr = next; +00815 } +00816 } +00817 +00818 <span class="keywordflow">if</span> (map-><a class="code" href="structmap__root.html#o2">num</a> != 0) { +00819 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"ERROR: list is supposed to be empty (has %d)\n"</span>, map-><a class="code" href="structmap__root.html#o2">num</a>); +00820 } +00821 } +00822 +<a name="l00828"></a><a class="code" href="map_8c.html#a27">00828</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a27">_stp_list_add_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *str) +00829 { +00830 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(map, map-><a class="code" href="structmap__root.html#o2">num</a>); +00831 <a class="code" href="map_8c.html#a20">_stp_map_set_str</a>(map, str); +00832 } +00833 +<a name="l00839"></a><a class="code" href="map_8c.html#a28">00839</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a28">_stp_list_add_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val) +00840 { +00841 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(map, map-><a class="code" href="structmap__root.html#o2">num</a>); +00842 <a class="code" href="map_8c.html#a17">_stp_map_set_int64</a>(map, val); +00843 } +00844 +<a name="l00850"></a><a class="code" href="map_8c.html#a29">00850</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="map_8c.html#a29">_stp_list_size</a>(<a class="code" href="structmap__root.html">MAP</a> map) +00851 { +00852 <span class="keywordflow">return</span> map-><a class="code" href="structmap__root.html#o2">num</a>; +00853 } +</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by <a href="http://www.doxygen.org/index.html"> -<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.3.9.1 </small></address> +<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address> </body> </html> |