74 lines
2.3 KiB
PHP
74 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);}
|
||
|
|
||
|
}
|
||
|
|
||
|
?>
|