"Fossies" - the Fresh Open Source Software Archive

Member "KASH3-lib-archindep-2008-07-31/lib/alist.g" (3 Sep 2008, 10438 Bytes) of package /linux/misc/old/KASH3-lib-archindep-2008-07-31.tar.gz:


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;