More fixes to external UDAFs
[com/gs-lite.git] / cfg / external_fcns.def
1  ///////////////////////////////////////////////////////////
2 //          Matching predicates
3 ///////////////////////////////////////////////////////////
4         PRED [LFTA_LEGAL, COST HIGH]str_exists_substr[string, string];
5         PRED [LFTA_LEGAL, COST HIGH]str_compare[string,string];
6         PRED [LFTA_LEGAL, COST LOW] str_match_offset [uint,string,string];
7         PRED [LFTA_LEGAL, COST LOW] byte_match_offset [uint,uint,string];
8     
9 ///////////////////////////////////////////////////////////
10 //          MIN/MAX functions
11 ///////////////////////////////////////////////////////////
12
13
14         ullong FUN [LFTA_LEGAL, COST FREE] LLMIN (ullong,ullong);
15         ullong FUN [LFTA_LEGAL, COST FREE] LLMAX (ullong,ullong); 
16         uint FUN [LFTA_LEGAL, COST FREE] UMIN (uint,uint);
17         uint FUN [LFTA_LEGAL, COST FREE] UMAX (uint,uint); 
18
19         IP FUN [LFTA_LEGAL, COST FREE] UMIN (IP,IP);
20         IP FUN [LFTA_LEGAL, COST FREE] UMAX (IP,IP);
21    
22 ///////////////////////////////////////////////////////////
23 //          conditional functions
24 ///////////////////////////////////////////////////////////
25
26         uint FUN [LFTA_LEGAL, COST FREE] EQ (uint, uint);
27         uint FUN [LFTA_LEGAL, COST FREE] EQ (int, int);
28         uint FUN [LFTA_LEGAL, COST FREE] EQ (ullong, ullong);
29         uint FUN [LFTA_LEGAL, COST FREE] GEQ (uint, uint);
30         uint FUN [LFTA_LEGAL, COST FREE] GEQ (int, int);
31         uint FUN [LFTA_LEGAL, COST FREE] GEQ (ullong, ullong);
32         uint FUN [LFTA_LEGAL, COST FREE] LEQ (uint, uint);
33         uint FUN [LFTA_LEGAL, COST FREE] LEQ (int, int);
34         uint FUN [LFTA_LEGAL, COST FREE] LEQ (ullong, ullong);
35
36
37 ///////////////////////////////////////////////////////////
38 //          Function for regex matching
39 ///////////////////////////////////////////////////////////
40
41
42 uint FUN [LFTA_LEGAL, COST EXPENSIVE]
43                 str_regex_match( string, string HANDLE);
44         uint FUN [LFTA_LEGAL, COST EXPENSIVE] 
45                 str_partial_regex_match( string, string HANDLE, uint);
46         string FUN [PARTIAL, COST EXPENSIVE] str_extract_regex( string, string HANDLE);
47   
48 ///////////////////////////////////////////////////////////
49 //         Truncating strings        
50 ///////////////////////////////////////////////////////////
51        
52         string FUN [LFTA_LEGAL,PARTIAL,COST FREE] str_truncate (string, uint);
53  
54 ///////////////////////////////////////////////////////////
55 //          Function for casting
56 ///////////////////////////////////////////////////////////
57
58     int FUN [LFTA_LEGAL,COST FREE] non_temporal(int);
59         uint FUN [LFTA_LEGAL,COST FREE] non_temporal(uint);
60         llong FUN [LFTA_LEGAL,COST FREE] non_temporal(llong);
61         ullong FUN [LFTA_LEGAL,COST FREE] non_temporal(ullong);
62
63         int FUN [LFTA_LEGAL,COST FREE]INT(uint);
64         int FUN [LFTA_LEGAL,COST FREE]INT(ullong);
65         int FUN [LFTA_LEGAL,COST FREE]INT(llong);
66  
67         uint FUN [LFTA_LEGAL,COST FREE]UINT(int);
68         uint FUN [LFTA_LEGAL,COST FREE]UINT(ullong);
69         uint FUN [LFTA_LEGAL,COST FREE]UINT(llong);
70         uint FUN [LFTA_LEGAL,COST FREE]UINT(IP);
71
72         float FUN [LFTA_LEGAL,COST FREE] FLOAT(llong);
73         float FUN [LFTA_LEGAL,COST FREE] FLOAT(ullong);
74         float FUN [LFTA_LEGAL,COST FREE] FLOAT(int);
75         float FUN [LFTA_LEGAL,COST FREE] FLOAT(uint);
76
77         ullong FUN [LFTA_LEGAL,COST FREE]ULLONG(uint);
78         ullong FUN [LFTA_LEGAL,COST FREE]ULLONG(int);
79
80 ///////////////////////////////////////////////////////////
81 //          Numeric functions
82 ///////////////////////////////////////////////////////////
83
84         float FUN [LFTA_LEGAL, COST LOW] sqrt(float); 
85
86
87 ///////////////////////////////////////////////////////////
88 //          Convert an IPv4 address 
89 ///////////////////////////////////////////////////////////
90
91
92     uint FUN [PARTIAL,COST HIGH] strtoi(string);
93         IP FUN [PARTIAL,COST HIGH] strtoip(string); 
94
95 //      for constant strings - faster at runtime
96         uint FUN [LFTA_LEGAL,COST LOW] strtoi_c(string HANDLE);
97         IP FUN [LFTA_LEGAL,COST LOW] strtoip_c(string HANDLE); 
98
99
100 ///////////////////////////////////////////////////////////
101 //          Compute running sum
102 ///////////////////////////////////////////////////////////
103
104
105
106     ullong UDAF [RUNNING, SUBAGGR moving_sum_lfta, SUPERAGGR super_moving_sum_udaf ] moving_sum_udaf fstring12 (uint, uint);
107
108         uint EXTR moving_sum moving_sum_udaf moving_sum_extract (uint,uint);
109         uint FUN  [COST LOW] moving_sum_extract(ullong);
110
111         float EXTR moving_sum_exp moving_sum_udaf moving_sum_extract_exp (uint,uint, float);
112         float FUN  [COST LOW]  moving_sum_extract_exp(ullong, float);
113
114         ullong UDAF [RUNNING] super_moving_sum_udaf fstring12 (ullong);
115         ullong UDAF moving_sum_lfta fstring8 (uint, uint);
116
117
118 ///////////////////////////////////////////////////////////
119 //               Compute the average of 
120 //              all positive numbers 
121 ///////////////////////////////////////////////////////////
122
123         float UDAF POSAVG fstring16(float);
124
125
126 ///////////////////////////////////////////////////////////
127 //               Simple average example 
128 ///////////////////////////////////////////////////////////
129
130         float EXTR extr_avg avg_udaf extr_avg_fcn (uint);
131         float FUN extr_avg_fcn (string);
132         string UDAF[SUBAGGR avg_udaf_lfta, SUPERAGGR avg_udaf_hfta] avg_udaf fstring12 (uint);
133         string UDAF avg_udaf_hfta fstring12 (string);
134         string UDAF avg_udaf_lfta fstring12 (uint);
135
136 ///////////////////////////////////////////////////////////
137 //               SAMPLING 
138 ///////////////////////////////////////////////////////////
139
140         fstring100 STATE smart_sampling_state;
141         int SFUN packet_count smart_sampling_state ();
142         float SFUN gamma smart_sampling_state ();
143         int SFUN do_clean_count smart_sampling_state ();
144         int SFUN init_threshold smart_sampling_state ();
145         int SFUN delay smart_sampling_state();
146         int SFUN newly_closed smart_sampling_state();
147
148 ///////////////////////////////////////////////////////////
149 //               Manku Heavy Hitter 
150 ///////////////////////////////////////////////////////////
151
152  
153         fstring20 STATE manku_hh_state;
154         BOOL SFUN local_count manku_hh_state (UINT);
155         int SFUN current_bucket manku_hh_state ();
156
157 ///////////////////////////////////////////////////////////
158 //         Flips approximate quantile
159 ///////////////////////////////////////////////////////////
160
161         uint EXTR quantile_of quant_udaf_hfta0 extr_quant_hfta0_fcn (uint, float);
162         uint  FUN [COST LOW] extr_quant_hfta0_fcn(string, float);
163         uint EXTR median_of quant_udaf_hfta0 extr_med_hfta0_fcn (uint);
164         uint  FUN [COST LOW] extr_med_hfta0_fcn(string);
165         uint EXTR qspace_of quant_udaf_hfta0 extr_quant_hfta0_space (uint);
166         uint  FUN [COST LOW] extr_quant_hfta0_space(string);
167         string UDAF [SUBAGGR quant_udaf_lfta3, SUPERAGGR quant_udaf_hfta3] quant_udaf_hfta0 fstring8 (uint);
168         string UDAF quant_udaf_hfta3 fstring16 (string);
169         string UDAF quant_udaf_lfta3 fstring6600 (uint);
170
171 ///////////////////////////////////////////////////////////
172 //               FIRST and LAST aggregation funciton
173 //      Should be replaced by builtins
174 ///////////////////////////////////////////////////////////
175
176         uint UDAF [RUNNING, SUBAGGR FIRST_lfta, SUPERAGGR FIRST_hfta] FIRST uint (uint);
177         uint UDAF [RUNNING] FIRST_hfta uint (uint);
178         uint UDAF [RUNNING] FIRST_lfta uint (uint);
179
180         ullong UDAF [RUNNING, SUBAGGR FIRST_ULL_lfta, SUPERAGGR FIRST_ULL_hfta] FIRST ullong (ullong);
181         ullong UDAF [RUNNING] FIRST_ULL_hfta ullong (ullong);
182         ullong UDAF [RUNNING] FIRST_ULL_lfta ullong (ullong);
183
184         IP UDAF [RUNNING, SUBAGGR FIRST_lfta, SUPERAGGR FIRST_hfta] FIRST IP (IP);
185         IP UDAF [RUNNING] FIRST_hfta IP (IP);
186         IP UDAF [RUNNING] FIRST_lfta IP (IP);
187
188         string UDAF [RUNNING, SUBAGGR FIRST_STR_lfta, SUPERAGGR FIRST_STR_hfta] FIRST string (string);
189         string UDAF [RUNNING] FIRST_STR_hfta string (string);
190         string UDAF [RUNNING] FIRST_STR_lfta string (string);
191
192         uint UDAF [RUNNING, SUBAGGR LAST_lfta, SUPERAGGR LAST_hfta] LAST uint (uint);
193         uint UDAF [RUNNING] LAST_hfta uint (uint);
194         uint UDAF [RUNNING] LAST_lfta uint (uint);
195
196         ullong UDAF [RUNNING, SUBAGGR LAST_ULL_lfta, SUPERAGGR LAST_ULL_hfta] LAST ullong (ullong);
197         ullong UDAF [RUNNING] LAST_ULL_hfta ullong (ullong);
198         ullong UDAF [RUNNING] LAST_ULL_lfta ullong (ullong);
199
200         IP UDAF [RUNNING, SUBAGGR LAST_lfta, SUPERAGGR LAST_hfta] LAST IP (IP);
201         IP UDAF [RUNNING] LAST_hfta IP (IP);
202         IP UDAF [RUNNING] LAST_lfta IP (IP);
203
204         string UDAF [RUNNING, SUBAGGR LAST_STR_lfta, SUPERAGGR LAST_STR_hfta] LAST string (string);
205         string UDAF [RUNNING] LAST_STR_hfta string (string);
206         string UDAF [RUNNING] LAST_STR_lfta string (string);
207
208 ///////////////////////////////////////////////////////////
209 //               integer array aggregation funciton
210 //      We are going to store 4 values in LFTA in fixed size buffer
211 //  plus one byte for array length (17 bytes total)
212 //  HFTA will combine partial aggregates
213 ///////////////////////////////////////////////////////////
214
215         string UDAF [RUNNING, SUBAGGR running_array_aggr_lfta, SUPERAGGR running_array_aggr_hfta] running_array_aggr string (uint);
216         string UDAF [RUNNING] running_array_aggr_hfta string (string);
217         string UDAF [RUNNING] running_array_aggr_lfta fstring17 (uint);
218