MudOSa4DGD/
MudOSa4DGD/bin/
MudOSa4DGD/data/
MudOSa4DGD/doc/
MudOSa4DGD/doc/driver/
MudOSa4DGD/doc/efun/bitstrings/
MudOSa4DGD/doc/efun/command/
MudOSa4DGD/doc/efun/communication/
MudOSa4DGD/doc/efun/heart_beat/
MudOSa4DGD/doc/efun/interactive/
MudOSa4DGD/doc/efun/inventory/
MudOSa4DGD/doc/efun/living/
MudOSa4DGD/doc/efun/mappings/
MudOSa4DGD/doc/efun/strings/
MudOSa4DGD/doc/efun/uid/
MudOSa4DGD/doc/funs/
MudOSa4DGD/doc/language/
MudOSa4DGD/mudlib/dgd/doc/
MudOSa4DGD/mudlib/dgd/lib/include/dgd/
MudOSa4DGD/mudlib/dgd/lib/std/
MudOSa4DGD/mudlib/dgd/lib/sys/
MudOSa4DGD/mudlib/dgd/log/
MudOSa4DGD/mudlib/log/
MudOSa4DGD/mudlib/std/include/
MudOSa4DGD/mudlib/std/obj/
/*
 * mapping.c
 *
 * Some handy mapping functions
 *
 * (C) Frank Schmidt, Jesus@NorseMUD
 *
 */


/* create a mapping of two arrays */
static mapping mkmapping(mixed *indices, mixed *values) {
  mapping map;
  int i, sz;
  if ((sz=::sizeof(indices)) != ::sizeof(values))
    error("Unequal argument sizes in mkmapping()");
  map = ([ ]);
  for (i = 0; i < sz; i++)
    map[indices[i]] = values[i];
  return map;
}


#ifndef map_delete
/* return a mapping with an element deleted
   (NB! Original mapping also changed)         */
static mapping map_delete(mapping map, string elt) {
  return map[elt] = 0;
}
#endif


/* map the values of a mapping */
static varargs mapping
map_mapping(mapping map, mixed func, mixed ob, mixed args...) {
  mixed *indices, *values;
  mapping copy;
  object o;
  int i, sz;
  
  if (stringp(ob)) {
    if (!(o=find_object(ob)))
      ob = compile_object(ob);
    else
      ob = o;
  }
  
  indices = map_indices(map);
  values = map_values(map);
  copy = ([ ]);
  for (i = 0, sz = ::sizeof(indices); i < sz; i++)
    copy[indices[i]] = __call_other(ob, func, values[i], args...);
  return copy;
}


/* subtract two mappings (a -= b not defined in LPC) */
static void map_sub(mapping a, mapping b) {
  if (mapp(a) && mapp(b)) {
    int i;
    string *keyz;
    keyz = map_indices(b);
    for (i=::sizeof(keyz); --i >= 0; )
      a[keyz[i]] = 0;
  }
}