summaryrefslogtreecommitdiffstats
path: root/runtime/docs/html/map_8h-source.html
blob: 7ecc890f3f441135a712481cdf2b0431c47c6bf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>SystemTap: SystemTap Runtime Library</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</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.4.1 -->
<h1>map.h</h1><a href="map_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span>
00002 <span class="preprocessor">#include &lt;linux/types.h&gt;</span>
00003 
<a name="l00004"></a><a class="code" href="structstat.html">00004</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00005"></a><a class="code" href="structstat.html#o0">00005</a>         int64_t count;
<a name="l00006"></a><a class="code" href="structstat.html#o1">00006</a>         int64_t sum;
<a name="l00007"></a><a class="code" href="structstat.html#o2">00007</a>         int64_t min, max;
<a name="l00008"></a><a class="code" href="structstat.html#o4">00008</a>         int64_t histogram[BUCKETS];
00009 } <a class="code" href="structstat.html">stat</a>;
00010 
<a name="l00011"></a><a class="code" href="unionkey__data.html">00011</a> <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> {
<a name="l00012"></a><a class="code" href="unionkey__data.html#o0">00012</a>         <span class="keywordtype">long</span> <a class="code" href="unionkey__data.html#o0">val</a>;
<a name="l00013"></a><a class="code" href="unionkey__data.html#o1">00013</a>         <span class="keywordtype">char</span> *<a class="code" href="unionkey__data.html#o1">str</a>;
00014 };
00015 
<a name="l00016"></a><a class="code" href="map_8h.html#a18">00016</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> { <a class="code" href="map_8h.html#a18a11">NONE</a>, <a class="code" href="map_8h.html#a18a12">LONG</a>, <a class="code" href="map_8h.html#a18a13">STR</a> } __attribute__ ((packed));
<a name="l00017"></a><a class="code" href="map_8h.html#a19">00017</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a19">valtype</a> { <a class="code" href="map_8h.html#a19a14">INT64</a>, <a class="code" href="map_8h.html#a19a15">STAT</a>, <a class="code" href="map_8h.html#a19a16">STRING</a>, <a class="code" href="map_8h.html#a19a17">END</a> };
00018 
00019 <span class="comment">/* all map nodes have the following structure */</span>
<a name="l00020"></a><a class="code" href="structmap__node.html">00020</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> {
<a name="l00021"></a><a class="code" href="structmap__node.html#o0">00021</a>         <span class="keyword">struct </span>list_head lnode;
<a name="l00022"></a><a class="code" href="structmap__node.html#o1">00022</a>         <span class="keyword">struct </span>hlist_node hnode;
<a name="l00023"></a><a class="code" href="structmap__node.html#o2">00023</a>         <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> key1;
<a name="l00024"></a><a class="code" href="structmap__node.html#o3">00024</a>         <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> key2;
<a name="l00025"></a><a class="code" href="structmap__node.html#o4">00025</a>         <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> <a class="code" href="structmap__node.html#o4">key1type</a>;
<a name="l00026"></a><a class="code" href="structmap__node.html#o5">00026</a>         <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> <a class="code" href="structmap__node.html#o5">key2type</a>;
00027 };
00028 
00029 <span class="comment">/* specific map nodes with data attached */</span>
<a name="l00030"></a><a class="code" href="structmap__node__int64.html">00030</a> <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> {
<a name="l00031"></a><a class="code" href="structmap__node__int64.html#o0">00031</a>         <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
<a name="l00032"></a><a class="code" href="structmap__node__int64.html#o1">00032</a>         int64_t <a class="code" href="structmap__node__int64.html#o1">val</a>;
00033 };
00034 
<a name="l00035"></a><a class="code" href="structmap__node__str.html">00035</a> <span class="keyword">struct </span><a class="code" href="structmap__node__str.html">map_node_str</a> {
<a name="l00036"></a><a class="code" href="structmap__node__str.html#o0">00036</a>         <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
<a name="l00037"></a><a class="code" href="structmap__node__str.html#o1">00037</a>         <span class="keywordtype">char</span> *<a class="code" href="structmap__node__str.html#o1">str</a>;
00038 };
00039 
<a name="l00040"></a><a class="code" href="structmap__node__stat.html">00040</a> <span class="keyword">struct </span><a class="code" href="structmap__node__stat.html">map_node_stat</a> {
<a name="l00041"></a><a class="code" href="structmap__node__stat.html#o0">00041</a>         <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
<a name="l00042"></a><a class="code" href="structmap__node__stat.html#o1">00042</a>         <a class="code" href="structstat.html">stat</a> <a class="code" href="structmap__node__stat.html#o1">stats</a>;
00043 };
00044 
<a name="l00045"></a><a class="code" href="structmap__root.html">00045</a> <span class="keyword">struct </span><a class="code" href="structmap__root.html">map_root</a> {
00046         <span class="comment">/* type of the values stored in the array */</span>
<a name="l00047"></a><a class="code" href="structmap__root.html#o0">00047</a>         <span class="keyword">enum</span> <a class="code" href="map_8h.html#a19">valtype</a> <a class="code" href="structmap__root.html#o0">type</a>;
00048 
00049         <span class="comment">/* maximum number of elements allowed in the array. */</span>
<a name="l00050"></a><a class="code" href="structmap__root.html#o1">00050</a>         <span class="keywordtype">int</span> <a class="code" href="structmap__root.html#o1">maxnum</a>;
00051 
00052         <span class="comment">/* current number of elements */</span>
<a name="l00053"></a><a class="code" href="structmap__root.html#o2">00053</a>         <span class="keywordtype">int</span> <a class="code" href="structmap__root.html#o2">num</a>;
00054 
00055         <span class="comment">/* when more than maxnum elements, wrap or discard */</span>
<a name="l00056"></a><a class="code" href="structmap__root.html#o3">00056</a>         <span class="keywordtype">int</span> <a class="code" href="structmap__root.html#o3">no_wrap</a>;
00057 
00058         <span class="comment">/* linked list of current entries */</span>
<a name="l00059"></a><a class="code" href="structmap__root.html#o4">00059</a>         <span class="keyword">struct </span>list_head head;
00060 
00061         <span class="comment">/* pool of unused entries.  Used only when entries are statically allocated */</span>
00062         <span class="comment">/* at startup. */</span>
<a name="l00063"></a><a class="code" href="structmap__root.html#o5">00063</a>         <span class="keyword">struct </span>list_head pool;
00064 
00065         <span class="comment">/* saved key entry for lookups */</span>
<a name="l00066"></a><a class="code" href="structmap__root.html#o6">00066</a>         <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *<a class="code" href="structmap__root.html#o6">key</a>;
00067 
00068         <span class="comment">/* this is the creation data saved between the key functions and the */</span>
00069         <span class="comment">/* set/get functions */</span>
<a name="l00070"></a><a class="code" href="structmap__root.html#o7">00070</a>         u_int8_t <a class="code" href="structmap__root.html#o7">create</a>;
<a name="l00071"></a><a class="code" href="structmap__root.html#o8">00071</a>         <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> <a class="code" href="structmap__root.html#o8">c_key1type</a>;
<a name="l00072"></a><a class="code" href="structmap__root.html#o9">00072</a>         <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> <a class="code" href="structmap__root.html#o9">c_key2type</a>;
<a name="l00073"></a><a class="code" href="structmap__root.html#o10">00073</a>         <span class="keyword">struct </span>hlist_head *<a class="code" href="structmap__root.html#o10">c_keyhead</a>;
<a name="l00074"></a><a class="code" href="structmap__root.html#o11">00074</a>         <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> c_key1;
<a name="l00075"></a><a class="code" href="structmap__root.html#o12">00075</a>         <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> c_key2;
00076 
00077         <span class="comment">/* the hash table for this array */</span>
<a name="l00078"></a><a class="code" href="structmap__root.html#o13">00078</a>         <span class="keyword">struct </span>hlist_head hashes[HASH_TABLE_SIZE];
00079 
00080         <span class="comment">/* pointer to allocated memory space */</span>
<a name="l00081"></a><a class="code" href="structmap__root.html#o14">00081</a>         <span class="keywordtype">void</span> *<a class="code" href="structmap__root.html#o14">membuf</a>;
00082 };
00083 
<a name="l00084"></a><a class="code" href="map_8h.html#a10">00084</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structmap__root.html">map_root</a> *<a class="code" href="structmap__root.html">MAP</a>;
00085 
<a name="l00086"></a><a class="code" href="map_8h.html#a0">00086</a> <span class="preprocessor">#define key1str(ptr) (ptr-&gt;n.key1.str)</span>
<a name="l00087"></a><a class="code" href="map_8h.html#a1">00087</a> <span class="preprocessor"></span><span class="preprocessor">#define key2str(ptr) (ptr-&gt;n.key2.str)</span>
<a name="l00088"></a><a class="code" href="map_8h.html#a2">00088</a> <span class="preprocessor"></span><span class="preprocessor">#define key1int(ptr) (ptr-&gt;n.key1.val)</span>
<a name="l00089"></a><a class="code" href="map_8h.html#a3">00089</a> <span class="preprocessor"></span><span class="preprocessor">#define key2int(ptr) (ptr-&gt;n.key2.val)</span>
00090 <span class="preprocessor"></span>
<a name="l00091"></a><a class="code" href="map_8h.html#a4">00091</a> <span class="preprocessor">#define _stp_map_key2(map, key1, key2)                          \</span>
00092 <span class="preprocessor">  ({                                                            \</span>
00093 <span class="preprocessor">    if (__builtin_types_compatible_p (typeof (key1), char[]))   \</span>
00094 <span class="preprocessor">      if (__builtin_types_compatible_p (typeof (key2), char[])) \</span>
00095 <span class="preprocessor">        _stp_map_key_str_str (map, (char *)(key1), (char *)(key2));     \</span>
00096 <span class="preprocessor">      else                                                      \</span>
00097 <span class="preprocessor">        _stp_map_key_str_long (map, (char *)(key1), (long)(key2));      \</span>
00098 <span class="preprocessor">    else                                                        \</span>
00099 <span class="preprocessor">      if (__builtin_types_compatible_p (typeof (key2), char[])) \</span>
00100 <span class="preprocessor">        _stp_map_key_long_str (map, (long)(key1), (char *)(key2));      \</span>
00101 <span class="preprocessor">      else                                                      \</span>
00102 <span class="preprocessor">        _stp_map_key_long_long (map, (long)(key1), (long)(key2));       \</span>
00103 <span class="preprocessor">  })</span>
00104 <span class="preprocessor"></span>
<a name="l00105"></a><a class="code" href="map_8h.html#a5">00105</a> <span class="preprocessor">#define _stp_map_key(map, key)                          \</span>
00106 <span class="preprocessor">  ({                                                            \</span>
00107 <span class="preprocessor">    if (__builtin_types_compatible_p (typeof (key), char[]))    \</span>
00108 <span class="preprocessor">      _stp_map_key_str (map, (char *)(key));                            \</span>
00109 <span class="preprocessor">    else                                                        \</span>
00110 <span class="preprocessor">      _stp_map_key_long (map, (long)(key));                             \</span>
00111 <span class="preprocessor">  })</span>
00112 <span class="preprocessor"></span>
<a name="l00113"></a><a class="code" href="map_8h.html#a6">00113</a> <span class="preprocessor">#define _stp_map_set(map, val)                          \</span>
00114 <span class="preprocessor">  ({                                                            \</span>
00115 <span class="preprocessor">    if (__builtin_types_compatible_p (typeof (val), char[]))    \</span>
00116 <span class="preprocessor">      _stp_map_set_str (map, (char *)(val));                            \</span>
00117 <span class="preprocessor">    else                                                        \</span>
00118 <span class="preprocessor">      _stp_map_set_int64 (map, (int64_t)(val));                 \</span>
00119 <span class="preprocessor">  })</span>
00120 <span class="preprocessor"></span>
<a name="l00121"></a><a class="code" href="map_8h.html#a7">00121</a> <span class="preprocessor">#define _stp_list_add(map, val)                         \</span>
00122 <span class="preprocessor">  ({                                                            \</span>
00123 <span class="preprocessor">    if (__builtin_types_compatible_p (typeof (val), char[]))    \</span>
00124 <span class="preprocessor">      _stp_list_add_str (map, (char *)(val));                           \</span>
00125 <span class="preprocessor">    else                                                        \</span>
00126 <span class="preprocessor">      _stp_list_add_int64 (map, (int64_t)(val));                        \</span>
00127 <span class="preprocessor">  })</span>
00128 <span class="preprocessor"></span>
00129 
<a name="l00138"></a><a class="code" href="map_8h.html#a8">00138</a> <span class="preprocessor">#define foreach(map, ptr)                               \</span>
00139 <span class="preprocessor">  for (ptr = (typeof(ptr))_stp_map_start(map); ptr; \</span>
00140 <span class="preprocessor">       ptr = (typeof(ptr))_stp_map_iter (map, (struct map_node *)ptr))</span>
00141 <span class="preprocessor"></span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
</body>
</html>