Generic BigList Resident (#73)

(an instance of Root Class made by Hacker)

     This is the object you want to use as a parent in order to @create a place for your biglists to live. Suitably sick souls may wish to reimplement :_genprop and :_kill to reclaim unused properties (this :_kill just throws them away and this :_genprop just relentlessly advances.... who cares). Anyway, you'll need to look at $biglist before this will make sense.



VERB SOURCE CODE:

_make:
":_make(...) => new node with value {...}";
if (!(caller in {this._mgr, this}))
    return E_PERM;
endif
prop = this:_genprop();
add_property(this, prop, args, {$generic_biglist_home.owner, ""});
return prop;
.


_kill:
":_kill(node) destroys the given node.";
if (!(caller in {this, this._mgr}))
    return E_PERM;
endif
delete_property(this, args[1]);
.


_get:
return (caller == this._mgr) ? this.(args[1]) | E_PERM;
.


_put:
return (caller == this._mgr) ? this.(args[1]) = listdelete(args, 1) | E_PERM;
.


_genprop:
gp = this._genprop;
ngp = "";
for i in [1..length(gp)]
    if (gp[i] != "z")
        ngp = (ngp + "bcdefghijklmnopqrstuvwxyz"[strcmp(gp[i], "`")]) + gp[i + 1..length(gp)];
        return " " + (this._genprop = ngp);
    endif
    ngp = ngp + "a";
endfor
return " " + (this._genprop = ngp + "a");
.


_ord:
"this is a dummy. You have to decide what your leaves are going to look like and 
then write this verb accordingly.  It should, given a leaf/list-element, return the 
corresponding key value.  So for an ordinary alist, where all of the leaves are of 
the form {key,datum}, you want:";
return args[1][1];
.



PROPERTY DATA:
      _genprop
      mowner
      _mgr