TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcmisc
iftsrch.c
Go to the documentation of this file.
1
5
/******************************************************************************/
6
#include "
libtpcmisc.h
"
7
/******************************************************************************/
8
9
/******************************************************************************/
15
int
iftGet
(
17
IFT
*ift,
19
char
*key,
21
int
verbose
22
) {
23
int
li;
24
25
if
(verbose>0) printf(
"%s(*ift, \"%s\")\n"
, __func__, key);
26
if
(ift==NULL) {
return
(-10);}
27
if
(key==NULL || strlen(key)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
28
29
/* Search the list */
30
for
(li=0; li<ift->
keyNr
; li++) {
31
if
(strcasecmp(ift->
item
[li].
key
, key)==0) {
32
strcpy(key, ift->
item
[li].
key
);
33
iftSetStatus
(ift, IFT_OK);
return
(li);
34
}
35
}
36
iftSetStatus
(ift, IFT_KEYNOTFOUND);
37
return
(-1);
38
}
39
/******************************************************************************/
40
41
/******************************************************************************/
48
int
iftGetNth
(
50
IFT
*ift,
52
char
*key,
54
int
n,
56
int
verbose
57
) {
58
int
li, found_nr=0;
59
60
if
(verbose>0) printf(
"%s(*ift, \"%s\", %d)\n"
, __func__, key, n);
61
if
(ift==NULL) {
return
(-10);}
62
if
(key==NULL || strlen(key)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
63
if
(n<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
64
65
/* Search the list */
66
for
(li=0; li<ift->
keyNr
; li++) {
67
if
(strcasecmp(ift->
item
[li].
key
, key)==0) {
68
strcpy(key, ift->
item
[li].
key
); found_nr++;
69
if
(n==found_nr) {
iftSetStatus
(ift, IFT_OK);
return
(li);}
70
}
71
}
72
iftSetStatus
(ift, IFT_KEYNOTFOUND);
73
return
(-1);
74
}
75
/******************************************************************************/
76
77
/******************************************************************************/
84
int
iftFindNthKey
(
86
IFT
*ift,
88
char
*str,
90
int
n,
92
int
verbose
93
) {
94
int
li, found_nr=0;
95
96
if
(verbose>0) printf(
"%s(*ift, \"%s\", %d)\n"
, __func__, str, n);
97
if
(ift==NULL) {
return
(-10);}
98
if
(str==NULL || strlen(str)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
99
if
(n<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
100
101
/* Search the list */
102
for
(li=0; li<ift->
keyNr
; li++) {
103
if
(strstr(ift->
item
[li].
key
, str)!=NULL) {
104
found_nr++;
105
if
(n==found_nr) {
iftSetStatus
(ift, IFT_OK);
return
(li);}
106
}
107
}
108
iftSetStatus
(ift, IFT_KEYNOTFOUND);
109
return
(-1);
110
}
111
/******************************************************************************/
112
113
/******************************************************************************/
120
int
iftFindNthValue
(
122
IFT
*ift,
124
char
*str,
126
int
n,
128
int
verbose
129
) {
130
int
li, found_nr=0;
131
132
if
(verbose>0) printf(
"%s(*ift, \"%s\", %d)\n"
, __func__, str, n);
133
if
(ift==NULL) {
return
(-10);}
134
if
(str==NULL || strlen(str)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
135
if
(n<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
136
137
/* Search the list */
138
for
(li=0; li<ift->
keyNr
; li++) {
139
if
(strstr(ift->
item
[li].
value
, str)!=NULL) {
140
found_nr++;
141
if
(n==found_nr) {
iftSetStatus
(ift, IFT_OK);
return
(li);}
142
}
143
}
144
iftSetStatus
(ift, IFT_VALUENOTFOUND);
145
return
(-1);
146
}
147
/******************************************************************************/
148
149
/******************************************************************************/
156
int
iftGetFrom
(
158
IFT
*ift,
160
int
si,
162
const
char
*key,
164
int
verbose
165
) {
166
int
li;
167
168
if
(verbose>0) printf(
"%s(*ift, %d, \"%s\")\n"
, __func__, si, key);
169
if
(ift==NULL) {
return
(-10);}
170
if
(key==NULL || strlen(key)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
171
if
(si<0) {
iftSetStatus
(ift, IFT_FAULT);
return
(-12);}
172
173
/* Search the list */
174
for
(li=si; li<ift->
keyNr
; li++) {
175
if
(strcasecmp(ift->
item
[li].
key
, key)==0) {
176
iftSetStatus
(ift, IFT_OK);
return
(li);
177
}
178
}
179
iftSetStatus
(ift, IFT_KEYNOTFOUND);
180
return
(-1);
181
}
182
/******************************************************************************/
183
184
/******************************************************************************/
191
int
iftGetFullmatchFrom
(
193
IFT
*ift,
195
int
si,
197
const
char
*key,
199
const
char
*value,
201
int
verbose
202
) {
203
int
li;
204
205
if
(verbose>0) printf(
"%s(*ift, %d, \"%s\", \"%s\")\n"
, __func__, si, key, value);
206
if
(ift==NULL) {
return
(-10);}
207
if
(key==NULL) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
208
if
(value==NULL) {
iftSetStatus
(ift, IFT_FAULT);
return
(-12);}
209
if
(si<0) {
iftSetStatus
(ift, IFT_FAULT);
return
(-13);}
210
211
/* Search the list */
212
for
(li=si; li<ift->
keyNr
; li++) {
213
if
(strcasecmp(ift->
item
[li].
key
, key)!=0)
continue
;
214
if
(strcasecmp(ift->
item
[li].
value
, value)!=0)
continue
;
215
iftSetStatus
(ift, IFT_OK);
return
(li);
216
}
217
iftSetStatus
(ift, IFT_KEYNOTFOUND);
218
return
(-1);
219
}
220
/******************************************************************************/
221
222
/******************************************************************************/
228
int
iftGetFloatValue
(
230
IFT
*ift,
232
int
si,
234
const
char
*key,
236
float
*value,
238
int
verbose
239
) {
240
int
li;
241
242
if
(verbose>0) printf(
"%s(*ift, \"%s\", *value)\n"
, __func__, key);
243
if
(ift==NULL) {
return
(-10);}
244
if
(value==NULL) {
iftSetStatus
(ift, IFT_FAULT);
return
(-10);}
245
*value=nanf(
""
);
246
if
(key==NULL || strlen(key)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
247
if
(si<0) {
iftSetStatus
(ift, IFT_FAULT);
return
(-12);}
248
iftSetStatus
(ift, IFT_VALUENOTFOUND);
249
/* Search the list */
250
for
(li=si; li<ift->
keyNr
; li++) {
251
if
(strcasecmp(ift->
item
[li].
key
, key)==0) {
252
if
(ift->
item
[li].
value
==NULL || strlen(ift->
item
[li].
value
)<1)
return
-1;
253
(void)sscanf(ift->
item
[li].
value
,
"%f"
, value);
254
if
(isnan(*value))
return
-1;
255
iftSetStatus
(ift, IFT_OK);
return
(li);
256
}
257
}
258
iftSetStatus
(ift, IFT_KEYNOTFOUND);
259
return
(-1);
260
}
261
/******************************************************************************/
262
263
/******************************************************************************/
268
int
iftGetDoubleValue
(
270
IFT
*ift,
272
int
si,
274
const
char
*key,
276
double
*value,
278
int
verbose
279
) {
280
int
li;
281
282
if
(verbose>0) printf(
"%s(*ift, \"%s\", *value)\n"
, __func__, key);
283
if
(ift==NULL) {
return
(-10);}
284
if
(value==NULL) {
iftSetStatus
(ift, IFT_FAULT);
return
(-10);}
285
*value=nan(
""
);
286
if
(key==NULL || strlen(key)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
287
if
(si<0) {
iftSetStatus
(ift, IFT_FAULT);
return
(-12);}
288
iftSetStatus
(ift, IFT_VALUENOTFOUND);
289
/* Search the list */
290
for
(li=si; li<ift->
keyNr
; li++) {
291
if
(strcasecmp(ift->
item
[li].
key
, key)==0) {
292
if
(ift->
item
[li].
value
==NULL || strlen(ift->
item
[li].
value
)<1)
return
-1;
293
(void)sscanf(ift->
item
[li].
value
,
"%lf"
, value);
294
if
(isnan(*value))
return
-1;
295
iftSetStatus
(ift, IFT_OK);
return
(li);
296
}
297
}
298
iftSetStatus
(ift, IFT_KEYNOTFOUND);
299
return
(-1);
300
}
301
/******************************************************************************/
302
303
/******************************************************************************/
309
int
iftGetIntValue
(
311
IFT
*ift,
313
int
si,
315
const
char
*key,
317
int
*value,
319
int
verbose
320
) {
321
int
li;
322
323
if
(verbose>0) printf(
"%s(*ift, \"%s\", *value)\n"
, __func__, key);
324
if
(ift==NULL) {
return
(-10);}
325
if
(value==NULL) {
iftSetStatus
(ift, IFT_FAULT);
return
(-10);}
326
*value=-9999;
327
if
(key==NULL || strlen(key)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(-11);}
328
if
(si<0) {
iftSetStatus
(ift, IFT_FAULT);
return
(-12);}
329
/* Search the list */
330
iftSetStatus
(ift, IFT_VALUENOTFOUND);
331
for
(li=si; li<ift->
keyNr
; li++) {
332
if
(strcasecmp(ift->
item
[li].
key
, key)==0) {
333
if
(ift->
item
[li].
value
==NULL || strlen(ift->
item
[li].
value
)<1)
return
-1;
334
(void)sscanf(ift->
item
[li].
value
,
"%d"
, value);
335
if
(*value==-9999)
return
-1;
336
iftSetStatus
(ift, IFT_OK);
return
(li);
337
}
338
}
339
iftSetStatus
(ift, IFT_KEYNOTFOUND);
340
return
(-1);
341
}
342
/******************************************************************************/
343
344
/******************************************************************************/
350
int
iftGetKeyNr
(
352
IFT
*ift,
354
const
char
*key,
356
int
verbose
357
) {
358
int
li, found_nr=0;
359
360
if
(verbose>0) printf(
"%s(*ift, \"%s\")\n"
, __func__, key);
361
if
(ift==NULL) {
return
(0);}
362
if
(key==NULL || strlen(key)<1) {
iftSetStatus
(ift, IFT_FAULT);
return
(0);}
363
iftSetStatus
(ift, IFT_KEYNOTFOUND);
364
365
/* Search the list */
366
for
(li=0; li<ift->
keyNr
; li++)
if
(strcasecmp(ift->
item
[li].
key
, key)==0) found_nr++;
367
if
(found_nr>0)
iftSetStatus
(ift, IFT_OK);
368
else
iftSetStatus
(ift, IFT_KEYNOTFOUND);
369
return
(found_nr);
370
}
371
/*****************************************************************************/
372
373
/*****************************************************************************/
iftSetStatus
void iftSetStatus(IFT *ift, int status)
Definition
ift.c:29
iftFindNthValue
int iftFindNthValue(IFT *ift, char *str, int n, int verbose)
Definition
iftsrch.c:120
iftGetFloatValue
int iftGetFloatValue(IFT *ift, int si, const char *key, float *value, int verbose)
Definition
iftsrch.c:228
iftGetDoubleValue
int iftGetDoubleValue(IFT *ift, int si, const char *key, double *value, int verbose)
Definition
iftsrch.c:268
iftFindNthKey
int iftFindNthKey(IFT *ift, char *str, int n, int verbose)
Definition
iftsrch.c:84
iftGet
int iftGet(IFT *ift, char *key, int verbose)
Definition
iftsrch.c:15
iftGetFullmatchFrom
int iftGetFullmatchFrom(IFT *ift, int si, const char *key, const char *value, int verbose)
Definition
iftsrch.c:191
iftGetIntValue
int iftGetIntValue(IFT *ift, int si, const char *key, int *value, int verbose)
Definition
iftsrch.c:309
iftGetFrom
int iftGetFrom(IFT *ift, int si, const char *key, int verbose)
Definition
iftsrch.c:156
iftGetKeyNr
int iftGetKeyNr(IFT *ift, const char *key, int verbose)
Definition
iftsrch.c:350
iftGetNth
int iftGetNth(IFT *ift, char *key, int n, int verbose)
Definition
iftsrch.c:48
libtpcmisc.h
Header file for libtpcmisc.
IFT_KEY_AND_VALUE::value
char * value
Definition
libtpcmisc.h:261
IFT_KEY_AND_VALUE::key
char * key
Definition
libtpcmisc.h:259
IFT
Definition
libtpcmisc.h:264
IFT::keyNr
int keyNr
Definition
libtpcmisc.h:270
IFT::item
IFT_KEY_AND_VALUE * item
Definition
libtpcmisc.h:279
Generated on
for TPCCLIB by
1.17.0