"Fossies" - the Fresh Open Source Software Archive 
As a special service "Fossies" has tried to format the requested text file into HTML format (style:
standard) with prefixed line numbers.
Alternatively you can here
view or
download the uninterpreted source code file.
1
2 #############################################################################
3 ##
4 #F Position( alist, any )
5 ##
6 ## documentation see lib/init-methods.g
7 _Position_alist_any:=
8 function(arg)
9 local alis,key,optarg;
10 CheckArgs(arg,["alis","key","optarg"],[,,__FAILSUCCREC]);
11 alis:=__ARGREC.("alis");
12 key:=__ARGREC.("key");
13 optarg:=__ARGREC.("optarg");
14 return DryPosition(alis.keys,key,optarg);
15 end;
16
17
18 #############################################################################
19 ##
20 #F AlistKeys( alist )
21 ##
22 ## documentation see lib/init-docs.g
23 AlistKeys:=
24 function(arg)
25 local alis,optarg,keyl;
26 CheckArgs(arg,["alis","optarg"],[,__FAILUREREC]);
27 alis:=__ARGREC.("alis");
28 optarg:=__ARGREC.("optarg");
29
30 keyl:=_GetEntry_rec_string(alis,"keys",optarg);
31 return keyl;
32 end;
33
34
35 #############################################################################
36 ##
37 #F AlistValues( alist )
38 ##
39 ## documentation see lib/init-docs.g
40 AlistValues:=
41 function(arg)
42 local alis,optarg,vall;
43 CheckArgs(arg,["alis","optarg"],[,__FAILUREREC]);
44 alis:=__ARGREC.("alis");
45 optarg:=__ARGREC.("optarg");
46
47 vall:=_GetEntry_rec_string(alis,"base",optarg);
48 return vall;
49 end;
50
51
52 ## the print function
53 _PrintAlist:=
54 function(alis)
55 Print("Alist on keys ",AlistKeys(alis));
56 end;
57
58
59
60 #############################################################################
61 ##
62 #F Assoc( alist, any )
63 #F Image( alist, any )
64 ##
65 ## documentation see lib/init-docs.g
66 Assoc:=
67 function(arg)
68 local alis,key,optarg,pos;
69
70 CheckArgs(arg,["alis","key","optarg"],[,,__FAILUREREC]);
71 alis:=__ARGREC.("alis");
72 key:=__ARGREC.("key");
73 optarg:=__ARGREC.("optarg");
74
75 pos:=_Position_alist_any(alis,key);
76 if IsSuccess(pos) then
77 return alis[pos];
78 else
79 return _GetFailEntry(optarg);
80 fi;
81 end;
82
83
84 #############################################################################
85 ##
86 #F Rassoc( alist, any )
87 #F Preimages( alist, any )
88 ##
89 ## documentation see lib/init-docs.g
90 Rassoc:=
91 function(arg)
92 local alis,val,optarg,pos;
93
94 CheckArgs(arg,["alis","val","optarg"],[,,__FAILUREREC]);
95 alis:=__ARGREC.("alis");
96 val:=__ARGREC.("val");
97 optarg:=__ARGREC.("optarg");
98
99 pos:=Positions(alis.base,val);
100 if IsSuccess(pos) then
101 return _Apply_func_list(i->alis.keys[i],pos);
102 else
103 _GetFailEntry(optarg);
104 fi;
105 end;
106
107
108 #############################################################################
109 ##
110 #F AddAssoc( alist, any, any )
111 #F AddAssoc( alist, list(any,any) )
112 #F AddAssoc_( alist, any, any )
113 #F AddAssoc_( alist, list(any,any) )
114 ##
115 ## documentation see lib/init-methods.g
116 _AddAssoc__alist_any_any:=
117 function(arg)
118 local alis,key,val,optarg,pos;
119
120 CheckArgs(arg,["alis","key","val","optarg"],[,,,__FAILSUCCREC]);
121 alis:=__ARGREC.("alis");
122 key:=__ARGREC.("key");
123 val:=__ARGREC.("val");
124 optarg:=__ARGREC.("optarg");
125
126 pos:=_Position_alist_any(alis,key);
127 if IsSuccess(pos) then
128 return _GetFailEntry(optarg);
129 else
130 DryAdd_(alis.keys,key);
131 _Add__list_any(alis.base,val);
132 return _GetSuccessEntry(optarg);
133 fi;
134 end;
135 _AddAssoc_alist_any_any:=
136 function(arg)
137 local alis,key,val,optarg,al;
138
139 CheckArgs(arg,["alis","key","val","optarg"],[,,,__FAILSUCCREC]);
140 alis:=__ARGREC.("alis");
141 key:=__ARGREC.("key");
142 val:=__ARGREC.("val");
143 optarg:=__ARGREC.("optarg");
144
145 al:=Copy(alis);
146 _AddAssoc__alist_any_any(al,key,val,optarg);
147
148 return al;
149 end;
150 _AddAssoc__alist_list:=
151 function(arg)
152 local alis,keyval,optarg,key,val;
153
154 CheckArgs(arg,["alis","keyval","optarg"],[,,__FAILSUCCREC]);
155 alis:=__ARGREC.("alis");
156 keyval:=__ARGREC.("keyval");
157 optarg:=__ARGREC.("optarg");
158
159 key:=_GetEntry_list_eor(keyval,1);
160 val:=Butfirst(keyval);
161 if IsSuccess(key) and IsSuccess(val) then
162 return _AddAssoc__alist_any_any(alis,key,val,optarg);
163 else
164 return _GetFailEntry(optarg);
165 fi;
166 end;
167 _AddAssoc_alist_list:=
168 function(arg)
169 local alis,keyval,optarg,al;
170
171 CheckArgs(arg,["alis","keyval","optarg"],[,,__FAILSUCCREC]);
172 alis:=__ARGREC.("alis");
173 keyval:=__ARGREC.("keyval");
174 optarg:=__ARGREC.("optarg");
175
176 al:=Copy(alis);
177 _AddAssoc__alist_list(al,keyval,optarg);
178 return al;
179 end;
180
181
182 #############################################################################
183 ##
184 #F PutAssoc( alist, any, any )
185 #F PutAssoc( alist, list(any,any) )
186 #F PutAssoc_( alist, any, any )
187 #F PutAssoc_( alist, list(any,any) )
188 ##
189 ## documentation see lib/init-methods.g
190 _PutAssoc__alist_any_any:=
191 function(arg)
192 local alis,key,val,optarg,pos;
193
194 CheckArgs(arg,["alis","key","val","optarg"],[,,,__FAILSUCCREC]);
195 alis:=__ARGREC.("alis");
196 key:=__ARGREC.("key");
197 val:=__ARGREC.("val");
198 optarg:=__ARGREC.("optarg");
199
200 pos:=_Position_alist_any(alis,key);
201 if IsSuccess(pos) then
202 alis[pos]:=val;
203 else
204 DryAdd_(alis.keys,key);
205 _Add__list_any(alis.base,val);
206 fi;
207 return _GetSuccessEntry(optarg);
208 end;
209 _PutAssoc_alist_any_any:=
210 function(arg)
211 local alis,key,val,optarg,al;
212
213 CheckArgs(arg,["alis","key","val","optarg"],[,,,__FAILSUCCREC]);
214 alis:=__ARGREC.("alis");
215 key:=__ARGREC.("key");
216 val:=__ARGREC.("val");
217 optarg:=__ARGREC.("optarg");
218
219 al:=Copy(alis);
220 _PutAssoc__alist_any_any(al,key,val,optarg);
221
222 return al;
223 end;
224 _PutAssoc__alist_list:=
225 function(arg)
226 local alis,keyval,optarg,key,val;
227
228 CheckArgs(arg,["alis","keyval","optarg"],[,,__FAILSUCCREC]);
229 alis:=__ARGREC.("alis");
230 keyval:=__ARGREC.("keyval");
231 optarg:=__ARGREC.("optarg");
232
233 key:=_GetEntry_list_eor(keyval,1);
234 val:=Butfirst(keyval);
235 if IsSuccess(key) and IsSuccess(val) then
236 return _PutAssoc__alist_any_any(alis,key,val,optarg);
237 else
238 return _GetFailEntry(optarg);
239 fi;
240 end;
241 _PutAssoc_alist_list:=
242 function(arg)
243 local alis,keyval,optarg,al;
244
245 CheckArgs(arg,["alis","keyval","optarg"],[,,__FAILSUCCREC]);
246 alis:=__ARGREC.("alis");
247 keyval:=__ARGREC.("keyval");
248 optarg:=__ARGREC.("optarg");
249
250 al:=Copy(alis);
251 _PutAssoc__alist_list(al,keyval,optarg);
252 return al;
253 end;
254
255
256
257 #############################################################################
258 ##
259 #F RemAssoc( alist, any )
260 #F RemAssoc_( alist, any )
261 #F RemImage( alist, any )
262 #F RemImage_( alist, any )
263 ##
264 ## documentation see lib/init-methods.g
265 RemAssoc_:=
266 function(arg)
267 local alis,key,optarg,pos;
268
269 CheckArgs(arg,["alis","key","optarg"],[,,__FAILSUCCREC]);
270 alis:=__ARGREC.("alis");
271 key:=__ARGREC.("key");
272 optarg:=__ARGREC.("optarg");
273
274 pos:=_Position_alist_any(alis,key);
275 if IsSuccess(pos) then
276 Remove_(alis.keys,pos);
277 Remove_(alis.base,pos);
278 return _GetSuccessEntry(optarg);
279 else
280 return _GetFailEntry(optarg);
281 fi;
282 end;
283 RemAssoc:=
284 function(arg)
285 local alis,key,optarg,al;
286
287 CheckArgs(arg,["alis","key","optarg"],[,,__FAILSUCCREC]);
288 alis:=__ARGREC.("alis");
289 key:=__ARGREC.("key");
290 optarg:=__ARGREC.("optarg");
291
292 al:=Copy(alis);
293 RemAssoc_(al,key,optarg);
294 return al;
295 end;
296
297
298 #############################################################################
299 ##
300 #F Alist( )
301 #F Alist( nof(list(any, any)) )
302 ##
303 ## documentation see lib/init-methods.g
304 Alist:=
305 function(arg)
306 local alis,keys,optarg,vallist,i,k,v;
307 keys:=Dry([]);
308 vallist:=[];
309
310 optarg := ExtractOptarg(arg);
311
312 for i in arg do
313 k := _GetEntry_list_eor(i,1);
314 v := _GetEntry_list_eor(i,2);
315 if IsSuccess(k) and IsSuccess(v) then
316 if DryAdd_(keys,k)=SUCCESS then
317 _Add__list_any(vallist,v);
318 fi;
319 fi;
320 od;
321
322 alis:=
323 rec(
324 base:=vallist,
325 keys:=keys,
326 type:=alist,
327 operations:=
328 rec(
329 Print:=_PrintAlist));
330
331 return alis;
332 end;
333
334
335 #############################################################################
336 ##
337 #F Function( <alist> )
338 ##
339 ## documentation see lib/init-methods.g
340 _Function_alist:=
341 function(arg)
342 local alis,outeroptarg;
343
344 CheckArgs(arg,["alis","outeroptarg"],[,__FAILUREREC]);
345 alis:=__ARGREC.("alis");
346 outeroptarg:=__ARGREC.("outeroptarg");
347
348 return
349 function(arg)
350 local key,optarg;
351 CheckArgs(arg,["key","optarg"],[,outeroptarg]);
352 key:=__ARGREC.("key");
353 optarg:=__ARGREC.("optarg");
354 return Assoc(alis,key,optarg);
355 end;
356 end;
357
358
359 #############################################################################
360 ##
361 #F List( <func>, <alist> )
362 ## Attention, the overloader shall handle this
363 ##
364 ## documentation see lib/init-methods.g
365 _Apply_func_alist:=
366 function(fun,alis)
367 local res, i;
368
369 res:=Alist();
370 for i in [1.._Size_list(alis.keys)] do
371 _PutAssoc__alist_any_any(res,alis.keys[i],fun(alis.base[i]));
372 od;
373 return res;
374 end;
375 _Apply_alist_func:=
376 function(alis,fun)
377 return _Apply_func_alist(fun,alis);
378 end;
379 _Apply__func_alist:=
380 function(fun,alis)
381 local res, i;
382
383 for i in [1.._Size_list(alis.keys)] do
384 _PutAssoc__alist_any_any(alis,alis.keys[i],fun(alis.base[i]));
385 od;
386 return SUCCESS;
387 end;
388 _Apply__alist_func:=
389 function(alis,fun)
390 return _Apply__func_alist(fun,alis);
391 end;
392
393
394 #############################################################################
395 ##
396 #F MapAlist( <func>, <alist> )
397 #F MapAlist_( <func>, <alist> )
398 ##
399 ## documentation see lib/init-methods.g
400 _MapAlist_func_alist:=
401 function(arg)
402 local fun,alis,i;
403 CheckArgs(arg,["fun","alis"],[]);
404 fun:=__ARGREC.("fun");
405 alis:=__ARGREC.("alis");
406 for i in _GetEntry_rec_string(alis,"keys",rec(Fail:=[])) do
407 fun(i,Assoc(alis,i));
408 od;
409 end;
410 _MapAlist_alist_func:=
411 function(arg)
412 local fun,alis,i;
413 CheckArgs(arg,["alis","fun"],[]);
414 fun:=__ARGREC.("fun");
415 alis:=__ARGREC.("alis");
416
417 _MapAlist_func_alist(fun,alis);
418 end;
419 _MapAlist__func_alist:=
420 function(arg)
421 local fun,alis,i;
422 CheckArgs(arg,["fun","alis"],[]);
423 fun:=__ARGREC.("fun");
424 alis:=__ARGREC.("alis");
425 for i in _GetEntry_rec_string(alis,"keys",rec(Fail:=[])) do
426 _PutAssoc__alist_any_any(alis,i,fun(i,Assoc(alis,i)));
427 od;
428 end;
429 _MapAlist__alist_func:=
430 function(arg)
431 local fun,alis,i;
432 CheckArgs(arg,["alis","fun"],[]);
433 fun:=__ARGREC.("fun");
434 alis:=__ARGREC.("alis");
435
436 _MapAlist__func_alist(fun,alis);
437 end;