[DGD] Objectd.c mappings of arrays

Par Winzell zell at skotos.net
Thu Feb 12 22:19:23 CET 2004


Michael,

> So would it be something like this?
>     mapping object_list;
>     object *arr1;
>     object *arr2;
>     object *arr3;
> 
>     object_list[0] == ({ arr1 });
>     object_list[1] == ({ arr2 });
>     object_list[2] == ({ arr3 });
> 
> If so, wouldn't you have to have some idea how many of a given object you
> will have so you can make sure your arrays/mappings don't grow beyond
> MAX_ARR_SIZE? Like in my example above, if my MAX_ARR_SIZE was 2000. Then if
> the number of clones of a given item became 6000, the object manager would
> fail. So I would have to have a bunch of empty arrays initialized just in
> case? Or am I missing something...

You can do it lots of ways. I believe we use an array of mappings at 
some point in the Skotos library. Having a few empty initialized arrays 
in an object that already stores several megabytes of meta-information 
is so irrelevant it should not even be considered sloppy.

If the objects really are sparse, you could just do a mapping of 
mappings instead -- e.g.

mapping bigmap;

void store_object(ob) {
    int ix;

    ix = status(ob)[O_INDEX];

    if (!bigmap[ix/1024]) {
       bigmap[ix/1024] = ([ ]);
    }

    bigmap[ix/1024][ob] = ob;
}


which would suffice for a good while, and still have excellent 
computational complexity.

Zell
_________________________________________________________________
List config page:  http://list.imaginary.com/mailman/listinfo/dgd



More information about the DGD mailing list