summaryrefslogtreecommitdiff
path: root/zend/globals.cpp
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-04-06 21:53:24 +0200
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-04-06 21:53:24 +0200
commit35fd3ccbeb4def71b4d8a59dfbb5c31201b099b9 (patch)
tree915223360aed4743aa6127fde4836aa413a260e5 /zend/globals.cpp
parentda4710512865e6816585ac4ab8edab2fa125e2d8 (diff)
renamed src directory to zend directory, disabled TSRM debug code
Diffstat (limited to 'zend/globals.cpp')
-rw-r--r--zend/globals.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/zend/globals.cpp b/zend/globals.cpp
new file mode 100644
index 0000000..8132ef3
--- /dev/null
+++ b/zend/globals.cpp
@@ -0,0 +1,92 @@
+/**
+ * Globals.cpp
+ *
+ * Implementation of the globals class
+ *
+ * @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com>
+ * @copyright 2013 Copernica BV
+ */
+#include "includes.h"
+
+/**
+ * Namespace
+ */
+namespace Php {
+
+/**
+ * Get access to the globals single instance
+ * @return Globals
+ */
+Globals &Globals::instance()
+{
+ static Globals globals;
+ return globals;
+}
+
+/**
+ * The one and only instance
+ * @var Globals
+ */
+Globals &GLOBALS = Globals::instance();
+
+/**
+ * Get access to a global variable
+ * @param name
+ * @return Global
+ */
+Global Globals::operator[](const char *name)
+{
+ // pointer to a zval
+ zval **varvalue;
+
+ // we need the TSRMLS variable
+ TSRMLS_FETCH();
+
+ // check if the variable already exists
+ if (zend_hash_find(&EG(symbol_table), name, strlen(name)+1, (void**)&varvalue) == FAILURE)
+ {
+ // the variable does not already exist, return a global object
+ // that will automatically set the value when it is updated
+ return Global(name);
+ }
+ else
+ {
+ // we are in the happy situation that the variable exists, we turn
+ // this value into a reference value, and return that
+ return Global(name, *varvalue);
+ }
+}
+
+/**
+ * Get access to a global variable
+ * @param name
+ * @return Global
+ */
+Global Globals::operator[](const std::string &name)
+{
+ // pointer to a zval
+ zval **varvalue;
+
+ // we need the TSRMLS variable
+ TSRMLS_FETCH();
+
+ // check if the variable already exists
+ if (zend_hash_find(&EG(symbol_table), name.c_str(), name.size()+1, (void**)&varvalue) == FAILURE)
+ {
+ // the variable does not already exist, return a global object
+ // that will automatically set the value when it is updated
+ return Global(name);
+ }
+ else
+ {
+ // we are in the happy situation that the variable exists, we turn
+ // this value into a reference value, and return that
+ return Global(name, *varvalue);
+ }
+}
+
+/**
+ * End of namespace
+ */
+}
+