note 37312 rejected from function.sizeof by nicos
| From: | nicos@php.net | Date: | Tue, 24 Jan 2006 12:43:42 +0000 |
| Subject: | note 37312 rejected from function.sizeof by nicos | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-102350@lists.php.net to get a copy of this message | ||
Note Submitter: Fallout2man
----
This is a little something that I made to mimic C's sizeof() for a script I may never complete,
but I'll post it here for everyone, as it may be helpful. I haven't tested this so not
quite sure if it works.
function c_sizeof($type,$auto_detect=0) {
if (!is_array($type)) { // if we're a single data type
if ($auto_detect=0) { //if someone is just telling us a type
switch ($type) {
case "char": {
return 1;
}
case "wchar_t": {
return 2;
}
case "int": {
return 4;
}
case "short": {
return 2;
}
case "long": {
return 4;
}
case "float": {
return 4;
}
case "double": {
return 8;
}
case "long double": {
return 10;
}
case "bool": {
return 1;
}
}
} else {// or else we're an actual type
$tvar=true;
switch ($tvar) {
case is_short($type): {
unset($tvar);
return 2;
}
case is_int($type): {
unset($tvar);
return 4;
}
case is_float($type): {
unset($tvar);
return 4;
}
case is_double($type): {
unset($tvar);
return 4;
}
case is_bool($type): {
unset($tvar);
return 1;
}
case is_string($type): {
unset($tvar);
return strlen($type);
}
}
}
} else { // or if we're an array
// calculate array data usage in bytes.
return c_sizeof_array($type);
}
}
function c_sizeof_array(&$struct) {
/* The recursive function for getting
the size in bytes of an array */
$element_size=0;
foreach ($struct as $key=>$val) {
if (!is_array($val) {
$element_size= ($element_size + c_sizeof($val,1));
} else {
$element_size= ($element_size + c_sizeof_array($val));
}
}
return $element_size;
}