summaryrefslogtreecommitdiff
path: root/include/ini.h
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-04-10 11:36:44 +0200
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-04-10 11:36:44 +0200
commitf0dec5907bd49bb468089b0fe50d8cbf2979272e (patch)
treef6ca989d6233cfc591efe07660e6dbb774d5f505 /include/ini.h
parentec2ee67b805b3f431db4ce2f9cdfc8d74aadfe35 (diff)
parent3119060c9c8905b9d07e04a342a2c32cf0bf1358 (diff)
Merge pull request #76 from valmat/ini
Implemented issue # 64
Diffstat (limited to 'include/ini.h')
-rw-r--r--include/ini.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/include/ini.h b/include/ini.h
new file mode 100644
index 0000000..9d4cbd9
--- /dev/null
+++ b/include/ini.h
@@ -0,0 +1,163 @@
+/**
+ * Ini.h
+ *
+ *
+ *
+ *
+ * @copyright 2013 Copernica BV
+ */
+
+/**
+ * Forward declaration
+ */
+
+struct _zend_ini_entry;
+
+/**
+ * Set up namespace
+ */
+namespace Php {
+
+
+ /**
+ * Class definition
+ */
+ class Ini
+ {
+ public:
+
+ /**
+ * Supported place-types for ini setting
+ * The possible settings for where the configuration can be changed are:
+ * PHP_INI_USER, PHP_INI_PERDIR, PHP_INI_SYSTEM and PHP_INI_ALL
+ * Usually you would choose where the setting can be changed based on how it is used. For example if you want to access
+ * the setting during RINIT stage then you would want PHP_INI_PERDIR because the setting would have no use after RINIT.
+ */
+ enum Place : int {
+ User = (1<<0), // ZEND_INI_USER (1<<0)
+ Perdir = (1<<1), // ZEND_INI_PERDIR (1<<1)
+ System = (1<<2), // ZEND_INI_SYSTEM (1<<2)
+ All = (1<<0) | (1<<1) | (1<<2) // ZEND_INI_ALL (ZEND_INI_USER|ZEND_INI_PERDIR|ZEND_INI_SYSTEM)
+ };
+
+ /**
+ * default constructors
+ */
+ Ini(const char *name, const char *value, const char *orig_value, const Place place = Place::All) :
+ _name(name), _value(value), _orig_value(orig_value), _place(place) {}
+
+ Ini(const char *name, const char *value, const Place place = Place::All) :
+ _name(name), _value(value), _orig_empty(true), _place(place) {}
+
+ /**
+ * Constructors for bool value
+ */
+ Ini(const char *name,const bool value, const bool orig_value, const Place place = Place::All) :
+ _name(name), _value(bool2str(value)), _orig_value(bool2str(orig_value)), _place(place) {}
+
+ Ini(const char *name, const bool value, const Place place = Place::All) :
+ _name(name), _value(bool2str(value)), _orig_empty(true), _place(place) {}
+
+ /**
+ * Constructors for integer value
+ * @param value
+ */
+ Ini(const char *name, const int16_t value, const int16_t orig_value, const Place place = Place::All) :
+ _name(name), _value(std::to_string(value)), _orig_value(std::to_string(orig_value)), _place(place) {}
+
+ Ini(const char *name, const int16_t value, const Place place = Place::All) :
+ _name(name), _value(std::to_string(value)), _orig_empty(true), _place(place) {}
+
+
+ Ini(const char *name, const int32_t value, const int32_t orig_value, const Place place = Place::All) :
+ _name(name), _value(std::to_string(value)), _orig_value(std::to_string(orig_value)), _place(place) {}
+
+ Ini(const char *name, const int32_t value, const Place place = Place::All) :
+ _name(name), _value(std::to_string(value)), _orig_empty(true), _place(place) {}
+
+
+ Ini(const char *name, const int64_t value, const int64_t orig_value, const Place place = Place::All) :
+ _name(name), _value(std::to_string(value)), _orig_value(std::to_string(orig_value)), _place(place) {}
+
+ Ini(const char *name, const int64_t value, const Place place = Place::All) :
+ _name(name), _value(std::to_string(value)), _orig_empty(true), _place(place) {}
+
+ /**
+ * Constructors for float value
+ * @param value
+ */
+ Ini(const char *name, const double value, const double orig_value, const Place place = Place::All) :
+ _name(name), _value(std::to_string(value)), _orig_value(std::to_string(orig_value)), _place(place) {}
+
+ Ini(const char *name, const double value, const Place place = Place::All) :
+ _name(name), _value(std::to_string(value)), _orig_empty(true), _place(place) {}
+
+
+ /**
+ * Copy constructor
+ * @param Ini
+ */
+ Ini(const Ini &that) :
+ _name(that._name), _value(that._value), _orig_value(that._orig_value), _orig_empty(that._orig_empty), _place(that._place)
+ {}
+
+ /**
+ * Move constructor
+ * @param Ini
+ */
+ Ini(Ini &&that) :
+ _name(that._name), _value(std::move(that._value)), _orig_value(std::move(that._orig_value)), _orig_empty(that._orig_empty), _place(that._place)
+ {}
+
+
+ /**
+ * Filling ini_entries
+ * @param zend_ini_entry *ini_entry, int module_number
+ * @param int module_number
+ */
+ void fill(_zend_ini_entry *ini_entry, int module_number);
+
+
+ /**
+ * Compare by name
+ * A predicate that takes two arguments of type Ini.
+ * Used when adding elements of type Ini in the container std::set
+ */
+ struct Compare
+ {
+ int operator()(const std::shared_ptr<Ini> &s1, const std::shared_ptr<Ini> &s2) const
+ {
+ return s1->_name.compare(s2->_name);
+ }
+ };
+
+ private:
+
+ static constexpr const char* bool2str(const bool value)
+ {
+ return ( static_cast<bool>(value) ? "On" : "Off");
+ }
+
+ // ini entry name
+ std::string _name;
+
+ // ini entry value
+ std::string _value;
+
+ // ini entry original value
+ std::string _orig_value;
+
+ // _orig_value is empty
+ bool _orig_empty = false;
+
+ // plase where the configuration can be changed
+ Place _place;
+ };
+
+
+
+/**
+ * End of namespace
+ */
+}
+