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

73 lines
2.3 KiB
PHP

<?php
namespace alveolata\storage;
// require_once(DIR_ALVEOLATA . '/definitions.php');
require_once(DIR_ALVEOLATA . '/storage/abstract/interface.php');
require_once(DIR_ALVEOLATA . '/storage/implementation-wrapper/functions.php');
/**
* @author Christian Fraß <frass@greenscale.de>
*/
class implementation_wrapper/*<type_key_inner,type_value_inner,type_key_outer,type_value_outer>*/ implements interface_storage/*<type_key_outer,type_value_outer>*/ {
/**
* @var struct_wrapper $subject
* @author Christian Fraß <frass@greenscale.de>
*/
private $subject;
/**
* @param struct_wrapper $subject
* @author Christian Fraß <frass@greenscale.de>
*/
protected function __construct(struct_wrapper $subject) {$this->subject = $subject;}
/**
* @return implementation_wrapper
* @author Christian Fraß <frass@greenscale.de>
*/
public static function make(
\alveolata\storage\interface_storage/*<type_key_inner,type_value_inner>*/ $core,
\Closure $convert_key_in,
\Closure $convert_key_out,
\Closure $convert_value_in,
\Closure $convert_value_out
) : implementation_wrapper
{
$subject = wrapper_make(
function () use ($core) {$core->setup();},
function () use ($core) {$core->teardown();},
function ($value) use ($core) {return $core->create($value);},
function ($key, $value) use ($core) {$core->update($key, $value);},
function ($key) use ($core) {$core->delete($key);},
function ($key) use ($core) {return $core->read($key);},
function ($parameters) use ($core) {return $core->search($parameters);},
$convert_key_in,
$convert_key_out,
$convert_value_in,
$convert_value_out
);
return (new implementation_wrapper($subject));
}
/**
* implementations
*
* @author Christian Fraß <frass@greenscale.de>
*/
public function teardown() : void {wrapper_teardown($this->subject);}
public function setup() : void {wrapper_setup($this->subject);}
public function create($value) {return wrapper_create($this->subject, $value);}
public function update($key, $value) : void {wrapper_update($this->subject, $key, $value);}
public function delete($key) : void {wrapper_delete($this->subject, $key);}
public function read($key) {return wrapper_read($this->subject, $key);}
public function search(array $parameters) : array {return wrapper_search($this->subject, $parameters);}
}
?>