/*
* copy.c
*
* Copy a variable (using a DGD feature)
*
* (C) Frank Schmidt, Jesus@NorseMUD
*
*/
#include <objects.h>
/* return a copy of a variable */
static mixed copy(mixed var) {
#if 1
switch (typeof(var)) {
case T_ARRAY: return var+({ }); break;
case T_MAPPING: return var+([ ]); break;
}
return var;
#else
return GLOBAL->get_copy(var);
#endif
}
/* return deep copy of a variable */
static mixed deep_copy(mixed var) {
mixed retur, *noekler;
int i;
switch (typeof(var)) {
case T_ARRAY:
/* array? */
i=::sizeof(var);
retur = allocate(i);
while (--i >= 0) {
switch (typeof(var[i])) {
case T_ARRAY:
case T_MAPPING:
retur[i] = deep_copy(var[i]);
break;
default:
retur[i] = var[i];
break;
}
}
return retur;
case T_MAPPING:
/* mapping? */
i=::sizeof(noekler=map_indices(var));
retur = ([ ]);
while (--i >= 0) {
string str;
switch (typeof(var[str=noekler[i]])) {
case T_ARRAY:
case T_MAPPING:
retur[str] = deep_copy(var[str]);
break;
default:
retur[str] = var[str];
break;
}
}
return retur;
}
return var;
}