Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** Static class to handle a slot-listening system.** Unlike the slots/signals Qt model, this class manages something that is* more like a simple hashtable, where each slot has only one value. For that* reason "Registers" makes more sense, the reference being to CPU registers.** This could be used for anything, but it's been built for a pretty specific phing* need, and that is to allow access to dynamic values that are set by logic* that is not represented in a build file. For exampe, we need a system for getting* the current resource (file) that is being processed by a filterchain in a fileset.** Each slot corresponds to only one read-only, dynamic-value RegisterSlot object. In* a build.xml register slots are expressed using a syntax similar to variables:** <replaceregexp>* <regexp pattern="\n" replace="%{task.current_file}"/>* </replaceregexp>** The task/type must provide a supporting setter for the attribute:** <code>* function setListeningReplace(RegisterSlot $slot) {* $this->replace = $slot;* }** // in main()* if ($this->replace instanceof RegisterSlot) {* $this->regexp->setReplace($this->replace->getValue());* } else {* $this->regexp->setReplace($this->replace);* }* </code>** @author Hans Lellelid <hans@xmpl.org>* @version $Revision: 1.3 $* @package phing.system.util*/class Register {/** Slots that have been registered */private static $slots = array();/*** Returns RegisterSlot for specified key.** If not slot exists a new one is created for key.** @param string $key* @return RegisterSlot*/public static function getSlot($key) {if (!isset(self::$slots[$key])) {self::$slots[$key] = new RegisterSlot($key);}return self::$slots[$key];}}/*** Represents a slot in the register.*/class RegisterSlot {/** The name of this slot. */private $key;/** The value for this slot. */private $value;/*** Constructs a new RegisterSlot, setting the key to passed param.* @param string $key*/public function __construct($key) {$this->key = (string) $key;}/*** Sets the key / name for this slot.* @param string $k*/public function setKey($k) {$this->key = (string) $k;}/*** Gets the key / name for this slot.* @return string*/public function getKey() {return $this->key;}/*** Sets the value for this slot.* @param mixed*/public function setValue($v) {$this->value = $v;}/*** Returns the value at this slot.* @return mixed*/public function getValue() {return $this->value;}}