php-src/scripts/ext_skel_ng/php_resource.php

75 lines
1.7 KiB
PHP
Raw Normal View History

<?php
class php_resource extends php_element {
2003-04-26 16:08:48 +00:00
function __construct($attr, $destruct, $description) {
$this->name = $attr['name'];
if (!$this->is_name($this->name)) {
$this->error[] = "'$attr[name] is not a valid resource name";
}
$this->payload = @$attr['payload'];
$this->alloc = @$attr['alloc'];
$this->destruct = $destruct;
$this->description = $description;
2003-04-26 16:08:48 +00:00
if (empty($this->payload)) {
$this->payload = "void";
}
}
function docbook_xml($base) {
return "
<section id='$base.resources.{$this->name}'>
2003-03-15 22:35:34 +00:00
<title><literal>{$this->name}</literal></title>
<para>
{$this->description}
</para>
</section>
";
}
function minit_code() {
return "
le_{$this->name} = zend_register_list_destructors_ex({$this->name}_dtor,
NULL,
\"{$this->name}\",
module_number);
";
}
function c_code() {
$dtor = "
int le_{$this->name};
void {$this->name}_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
{$this->payload} * resource = ({$this->payload} *)(rsrc->ptr);
{$this->destruct}
";
if ($this->alloc === "yes") {
$dtor .= " efree(resource);\n";
}
$dtor .= "}\n";
return $dtor;
}
function h_code() {
$upname = strtoupper($this->name);
return "
#define {$upname}_FETCH(r, z) ZEND_FETCH_RESOURCE(r, {$this->payload} *, z, -1, ${$this->name}, le_{$this->name<6D>}); \
2003-04-26 16:08:48 +00:00
if (!r) { RETURN_FALSE; }
#define {$upname}_REGISTER(r) ZEND_REGISTER_RESOURCE(return_value, r, le_{$this->name<6D>});
";
}
}
?>