+
+ /**
+ * Determines if a key is set in the generic array
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @param $key Key to check
+ * @return $isset Whether the given key is set
+ */
+ protected final function isGenericArrayKeySet ($keyGroup, $subGroup, $key) {
+ // Is it there?
+ $isset = isset($this->genericArray[$keyGroup][$subGroup][$key]);
+
+ // Return it
+ return $isset;
+ }
+
+ /**
+ * Determines if an element is set in the generic array
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @param $key Key to check
+ * @param $element Element to check
+ * @return $isset Whether the given key is set
+ */
+ protected final function isGenericArrayElementSet ($keyGroup, $subGroup, $key, $element) {
+ // Is it there?
+ $isset = isset($this->genericArray[$keyGroup][$subGroup][$key][$element]);
+
+ // Return it
+ return $isset;
+ }
+
+ /**
+ * Determines if a group is set in the generic array
+ *
+ * @param $keyGroup Main group
+ * @param $subGroup Sub group
+ * @return $isset Whether the given group is set
+ */
+ protected final function isGenericArrayGroupSet ($keyGroup, $subGroup) {
+ // Is it there?
+ $isset = isset($this->genericArray[$keyGroup][$subGroup]);
+
+ // Return it
+ return $isset;
+ }
+
+ /**
+ * Getter for sub key group
+ *
+ * @param $keyGroup Main key group
+ * @param $subGroup Sub key group
+ * @return $array An array with all array elements
+ */
+ protected final function getGenericSubArray ($keyGroup, $subGroup) {
+ // Is it there?
+ if (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) {
+ // No, then abort here
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.');
+ } // END - if
+
+ // Return it
+ return $this->genericArray[$keyGroup][$subGroup];
+ }
+
+ /**
+ * Unsets a given key in generic array
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @param $key Key to unset
+ * @return void
+ */
+ protected final function unsetGenericArrayElement ($keyGroup, $subGroup, $key) {
+ // Remove it
+ unset($this->genericArray[$keyGroup][$subGroup][$key]);
+ }
+
+ /**
+ * Append a string to a given generic array key
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @param $key Key to unset
+ * @param $value Value to add/append
+ * @return void
+ */
+ protected final function appendStringToGenericArrayElement ($keyGroup, $subGroup, $key, $value, $appendGlue = '') {
+ // Is it already there?
+ if ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
+ // Append it
+ $this->genericArray[$keyGroup][$subGroup][$key] .= $appendGlue . (string) $value;
+ } else {
+ // Add it
+ $this->genericArray[$keyGroup][$subGroup][$key] = (string) $value;
+ }
+ }
+
+ /**
+ * Pushes an element to a generic key
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @param $key Key to use
+ * @param $value Value to add/append
+ * @return $count Number of array elements
+ */
+ protected final function pushValueToGenericArrayElement ($keyGroup, $subGroup, $key, $value) {
+ // Is it set?
+ if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
+ // Initialize array
+ $this->genericArray[$keyGroup][$subGroup][$key] = array();
+ } // END - if
+
+ // Then push it
+ $count = array_push($this->genericArray[$keyGroup][$subGroup][$key], $value);
+
+ // Return count
+ return $count;
+ }
+
+ /**
+ * Sets a value in given generic array key/element
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @param $key Key to set
+ * @param $element Element to set
+ * @param $value Value to set
+ * @return void
+ */
+ protected final function setGenericArrayElement ($keyGroup, $subGroup, $key, $element, $value) {
+ // Then set it
+ $this->genericArray[$keyGroup][$subGroup][$key][$element] = $value;
+ }
+
+ /**
+ * Pops an element from a generic group
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @param $key Key to unset
+ * @return $value Last "popped" value
+ */
+ protected final function popGenericArrayElement ($keyGroup, $subGroup, $key) {
+ // Is it set?
+ if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
+ // Not found
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' not found.');
+ } // END - if
+
+ // Then "pop" it
+ $value = array_pop($this->genericArray[$keyGroup][$subGroup][$key]);
+
+ // Return value
+ return $value;
+ }
+
+ /**
+ * Shifts an element from a generic group
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @param $key Key to unset
+ * @return $value Last "popped" value
+ */
+ protected final function shiftGenericArrayElement ($keyGroup, $subGroup, $key) {
+ // Is it set?
+ if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
+ // Not found
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' not found.');
+ } // END - if
+
+ // Then "shift" it
+ $value = array_shift($this->genericArray[$keyGroup][$subGroup][$key]);
+
+ // Return value
+ return $value;
+ }
+
+ /**
+ * Count generic array group
+ *
+ * @param $keyGroup Main group for the key
+ * @return $count Count of given group
+ */
+ protected final function countGenericArray ($keyGroup) {
+ // Is it there?
+ if (!isset($this->genericArray[$keyGroup])) {
+ // Abort here
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ' not found.');
+ } // END - if
+
+ // Then count it
+ $count = count($this->genericArray[$keyGroup]);
+
+ // Return it
+ return $count;
+ }
+
+ /**
+ * Count generic array sub group
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @return $count Count of given group
+ */
+ protected final function countGenericArrayGroup ($keyGroup, $subGroup) {
+ // Is it there?
+ if (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) {
+ // Abort here
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.');
+ } // END - if
+
+ // Then count it
+ $count = count($this->genericArray[$keyGroup][$subGroup]);
+
+ // Return it
+ return $count;
+ }
+
+ /**
+ * Count generic array elements
+ *
+ * @param $keyGroup Main group for the key
+ * @param $subGroup Sub group for the key
+ * @para $key Key to count
+ * @return $count Count of given key
+ */
+ protected final function countGenericArrayElements ($keyGroup, $subGroup, $key) {
+ // Is it there?
+ if (!$this->isGenericArrayKeySet($keyGroup, $subGroup)) {
+ // Abort here
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.');
+ } elseif (!$this->isValidGenericArrayGroup($keyGroup, $subGroup)) {
+ // Not valid
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' is not an array.');
+ }
+
+ // Then count it
+ $count = count($this->genericArray[$keyGroup][$subGroup][$key]);
+
+ // Return it
+ return $count;
+ }
+
+ /**
+ * Getter for whole generic group array
+ *
+ * @param $keyGroup Key group to get
+ * @return $array Whole generic array group
+ */
+ protected final function getGenericArray ($keyGroup) {
+ // Is it there?
+ if (!isset($this->genericArray[$keyGroup])) {
+ // Then abort here
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ' does not exist.');
+ } // END - if
+
+ // Return it
+ return $this->genericArray[$keyGroup];
+ }
+
+ /**
+ * Getter for generic array key
+ *
+ * @param $keyGroup Key group to get
+ * @param $subGroup Sub group for the key
+ * @param $key Key to unset
+ * @return $value Mixed value from generic array element
+ */
+ protected final function getGenericArrayKey ($keyGroup, $subGroup, $key) {
+ // Is it there?
+ if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
+ // Then abort here
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' does not exist.');
+ } // END - if
+
+ // Return it
+ return $this->genericArray[$keyGroup][$subGroup][$key];
+ }
+
+ /**
+ * Getter for generic array element
+ *
+ * @param $keyGroup Key group to get
+ * @param $subGroup Sub group for the key
+ * @param $key Key to look for
+ * @param $element Element to look for
+ * @return $value Mixed value from generic array element
+ */
+ protected final function getGenericArrayElement ($keyGroup, $subGroup, $key, $element) {
+ // Is it there?
+ if (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) {
+ // Then abort here
+ trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ' does not exist.');
+ } // END - if
+
+ // Return it
+ return $this->genericArray[$keyGroup][$subGroup][$key][$element];
+ }
+
+ /**
+ * Checks if a given sub group is valid (array)
+ *
+ * @param $keyGroup Key group to get
+ * @param $subGroup Sub group for the key
+ * @return $isValid Whether given sub group is valid
+ */
+ protected final function isValidGenericArrayGroup ($keyGroup, $subGroup) {
+ // Determine it
+ $isValid = (($this->isGenericArrayGroupSet($keyGroup, $subGroup)) && (is_array($this->getGenericSubArray($keyGroup, $subGroup))));
+
+ // Return it
+ return $isValid;
+ }