rosavox/lib/alveolata/storage/implementation-wrapper/functions.php
2025-05-23 07:33:29 +00:00

208 lines
5 KiB
PHP

<?php
namespace alveolata\storage;
// require_once(DIR_ALVEOLATA . '/definitions.php');
require_once(DIR_ALVEOLATA . '/list/functions.php');
/**
* @author Christian Fraß <frass@greenscale.de>
*/
class struct_wrapper/*<type_key_inner,type_value_inner,type_key_outer,type_value_outer>*/
{
/**
* @var \Closure {function<type_key_out,type_key_in>}
* @author Christian Fraß <frass@greenscale.de>
*/
public $convert_key_in;
/**
* @var \Closure {function<type_key_in,type_key_out>}
* @author Christian Fraß <frass@greenscale.de>
*/
public $convert_key_out;
/**
* @var \Closure {function<type_value_out,type_value_in>}
* @author Christian Fraß <frass@greenscale.de>
*/
public $convert_value_in;
/**
* @var \Closure {function<type_value_in,type_value_out>}
* @author Christian Fraß <frass@greenscale.de>
*/
public $convert_value_out;
/**
* @author Christian Fraß <frass@greenscale.de>
*/
public function __construct(
\Closure $core_setup,
\Closure $core_teardown,
\Closure $core_create,
\Closure $core_update,
\Closure $core_delete,
\Closure $core_read,
\Closure $core_search,
\Closure $convert_key_in,
\Closure $convert_key_out,
\Closure $convert_value_in,
\Closure $convert_value_out
)
{
$this->core_setup = $core_setup;
$this->core_teardown = $core_teardown;
$this->core_create = $core_create;
$this->core_update = $core_update;
$this->core_delete = $core_delete;
$this->core_read = $core_read;
$this->core_search = $core_search;
$this->convert_key_in = $convert_key_in;
$this->convert_key_out = $convert_key_out;
$this->convert_value_in = $convert_value_in;
$this->convert_value_out = $convert_value_out;
}
}
/**
* @author Christian Fraß <frass@greenscale.de>
*/
function wrapper_make/*<type_key_inner,type_value_inner,type_key_outer,type_value_outer>*/(
\Closure $core_setup,
\Closure $core_teardown,
\Closure $core_create,
\Closure $core_update,
\Closure $core_delete,
\Closure $core_read,
\Closure $core_search,
\Closure $convert_key_in,
\Closure $convert_key_out,
\Closure $convert_value_in,
\Closure $convert_value_out
) : struct_wrapper/*<type_key_inner,type_value_inner,type_key_outer,type_value_outer>*/
{
return (
new struct_wrapper/*<type_key_inner,type_value_inner,type_key_outer,type_value_outer>*/(
$core_setup,
$core_teardown,
$core_create,
$core_update,
$core_delete,
$core_read,
$core_search,
$convert_key_in,
$convert_key_out,
$convert_value_in,
$convert_value_out
)
);
}
/**
* @author Christian Fraß <frass@greenscale.de>
*/
function wrapper_teardown/*<type_key_inner, type_key_outer, type_value_inner, type_value_outer>*/(
struct_wrapper/*<type_key_inner, type_key_outer, type_value_inner, type_value_outer>*/ $subject
) : void
{
($subject->core_teardown)();
}
/**
* @author Christian Fraß <frass@greenscale.de>
*/
function wrapper_setup(
struct_wrapper/*<type_key_inner, type_key_outer, type_value_inner, type_value_outer>*/ $subject
) : void
{
($subject->core_setup)();
}
/**
* @author Christian Fraß <frass@greenscale.de>
*/
function wrapper_create(
struct_wrapper/*<type_key_inner, type_key_outer, type_value_inner, type_value_outer>*/ $subject,
/*type_value_outer */$value_outer
)/* : type_key_outer*/
{
$value_inner = ($subject->convert_value_in)($value_outer);
$key_inner = ($subject->core_create)($value_inner);
$key_outer = ($subject->convert_key_out)($key_inner);
return $key_outer;
}
/**
* @author Christian Fraß <frass@greenscale.de>
*/
function wrapper_update(
struct_wrapper/*<type_key_inner, type_key_outer, type_value_inner, type_value_outer>*/ $subject,
/*type_key_outer */$key_outer,
/*type_value_outer */$value_outer
) : void
{
$key_inner = ($subject->convert_key_in)($key_outer);
$value_inner = ($subject->convert_value_in)($value_outer);
($subject->core_update)($key_inner, $value_inner);
}
/**
* @author Christian Fraß <frass@greenscale.de>
*/
function wrapper_delete(
struct_wrapper/*<type_key_inner, type_key_outer, type_value_inner, type_value_outer>*/ $subject,
/*type_key_outer */$key_outer
) : void
{
($subject->core_delete)($key_outer);
}
/**
* @author Christian Fraß <frass@greenscale.de>
*/
function wrapper_read(
struct_wrapper/*<type_key_inner, type_key_outer, type_value_inner, type_value_outer>*/ $subject,
/*type_key_outer */$key_outer
)/* : type_value_outer*/
{
$key_inner = ($subject->convert_key_in)($key_outer);
$value_inner = ($subject->core_read)($key_inner);
$value_outer = ($subject->convert_value_out)($value_inner);
return $value_outer;
}
/**
* @author Christian Fraß <frass@greenscale.de>
*/
function wrapper_search(
struct_wrapper/*<type_key_inner, type_key_outer, type_value_inner, type_value_outer>*/ $subject,
array $parameters = []
) : array
{
$keys_inner = ($subject->core_search)($parameters);
$keys_outer = \alveolata\list_\map/*<type_key_inner, type_key_outer>*/(
$keys_inner,
function (/*type_key_inner */$key_inner)/* : type_key_outer*/ use ($subject) {
return ($subject->convert_key_out)($key_inner);
}
);
return $keys_outer;
}
?>