add methods to decrypt return data from router
[GitHub/Stricted/speedport-hybrid-php-api.git] / CryptLib / Core / Enum.php
diff --git a/CryptLib/Core/Enum.php b/CryptLib/Core/Enum.php
new file mode 100644 (file)
index 0000000..13f413c
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+/**
+ * The Enum base class for Enum functionality
+ *
+ * PHP version 5.3
+ *
+ * @category   PHPCryptLib
+ * @package    Core
+ * @author     Anthony Ferrara <ircmaxell@ircmaxell.com>
+ * @copyright  2011 The Authors
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    Build @@version@@
+ */
+namespace CryptLib\Core;
+
+use \ReflectionObject;
+
+/**
+ * The Enum base class for Enum functionality
+ *
+ * This is based off of the SplEnum class implementation (which is only available
+ * as a PECL extension in 5.3)
+ *
+ * @see        http://www.php.net/manual/en/class.splenum.php
+ * @category   PHPCryptLib
+ * @package    Core
+ * @author     Anthony Ferrara <ircmaxell@ircmaxell.com>
+ */
+abstract class Enum {
+
+    /**
+     * A default value of null is provided.  Override this to set your own default
+     */
+    const __DEFAULT = null;
+
+    /**
+     * @var string The name of the constant this instance is using
+     */
+    protected $name = '';
+
+    /**
+     * @var scalar The value of the constant this instance is using.
+     */
+    protected $value = '';
+
+    /**
+     * Creates a new value of the Enum type
+     *
+     * @param mixed   $value  The value this instance represents
+     * @param boolean $strict Not Implemented at this time
+     *
+     * @return void
+     * @throws UnexpectedValueException If the value is not a constant
+     */
+    public function __construct($value = null, $strict = false) {
+        if (is_null($value)) {
+            $value = static::__DEFAULT;
+        }
+        $validValues = $this->getConstList();
+        $this->name  = array_search($value, $validValues);
+        if (!$this->name) {
+            throw new \UnexpectedValueException(
+                'Value not a const in enum ' . get_class($this)
+            );
+        }
+        $this->value = $value;
+    }
+
+    /**
+     * Cast the current object to a string and return its value
+     *
+     * @return mixed the current value of the instance
+     */
+    public function __toString() {
+        return (string) $this->value;
+    }
+
+    /**
+     * Compare two enums using numeric comparison
+     *
+     * @param Enum $arg The enum to compare this instance to
+     *
+     * @return int 0 if same, 1 if the argument is greater, -1 else
+     */
+    public function compare(Enum $arg) {
+        if ($this->value == $arg->value) {
+            return 0;
+        } elseif ($this->value > $arg->value) {
+            return -1;
+        } else {
+            return 1;
+        }
+    }
+
+    /**
+     * Returns all constants (including values) as an associative array
+     *
+     * @param boolean $include_default Include the __default magic value?
+     *
+     * @return array All of the constants found against this instance
+     */
+    public function getConstList($include_default = false) {
+        static $constCache = array();
+        $class             = get_class($this);
+        if (!isset($constCache[$class])) {
+            $reflector          = new ReflectionObject($this);
+            $constCache[$class] = $reflector->getConstants();
+        }
+        if (!$include_default) {
+            $constants = $constCache[$class];
+            unset($constants['__DEFAULT']);
+            return $constants;
+        }
+        return $constCache[$class];
+    }
+
+}
\ No newline at end of file