summaryrefslogtreecommitdiff
path: root/src/iteratorimpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/iteratorimpl.cpp')
-rw-r--r--src/iteratorimpl.cpp183
1 files changed, 0 insertions, 183 deletions
diff --git a/src/iteratorimpl.cpp b/src/iteratorimpl.cpp
deleted file mode 100644
index 2750ddb..0000000
--- a/src/iteratorimpl.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- * IteratorImpl.cpp
- *
- * Implementation file of the IteratorImpl class
- *
- * @author Emiel Bruijntjes <emiel.bruijntjes@copernica.com>
- * @copyright 2014 Copernica BV
- */
-#include "includes.h"
-
-/**
- * Set up namespace
- */
-namespace Php {
-
-/**
- * Helper method to get access to ourselves
- * @param iter
- * @return IteratorImpl
- */
-static IteratorImpl *self(zend_object_iterator *iter)
-{
- return (IteratorImpl *)iter->data;
-}
-
-/**
- * Iterator destructor method
- * @param iter
- * @param tsrm_ls
- */
-void IteratorImpl::destructor(zend_object_iterator *iter TSRMLS_DC)
-{
- // delete the object
- delete self(iter);
-}
-
-/**
- * Iterator valid function
- * Returns FAILURE or SUCCESS
- * @param iter
- * @param tsrm_ls
- * @return int
- */
-int IteratorImpl::valid(zend_object_iterator *iter TSRMLS_DC)
-{
- // check if valid
- return self(iter)->valid() ? SUCCESS : FAILURE;
-}
-
-/**
- * Fetch the current item
- * @param iter
- * @param data
- * @param tsrm_ls
- */
-void IteratorImpl::current(zend_object_iterator *iter, zval ***data TSRMLS_DC)
-{
- // get the actual iterator
- IteratorImpl *iterator = self(iter);
-
- // retrieve the value (and store it in a member so that it is not
- // destructed when the function returns)
- iterator->_current = iterator->current();
-
- // copy the value
- *data = &iterator->_current._val;
-}
-
-/**
- * Fetch the key for the current element (optional, may be NULL). The key
- * should be written into the provided zval* using the ZVAL_* macros. If
- * this handler is not provided auto-incrementing integer keys will be
- * used.
- * @param iter
- * @param key
- * @param tsrm_ls
- */
-void IteratorImpl::key(zend_object_iterator *iter, zval *key TSRMLS_DC)
-{
- // retrieve the key
- Value retval(self(iter)->key());
-
- // detach the underlying zval
- zval *val = retval.detach();
-
- // copy it to the key
- ZVAL_ZVAL(key, val, 1, 1);
-}
-
-/**
- * Function to retrieve the current key, php 5.3 style
- * @param iter
- * @param str_key
- * @param str_key_len
- * @param int_key
- * @param tsrm_ls
- * @return HASH_KEY_IS_STRING or HASH_KEY_IS_LONG
- */
-int IteratorImpl::key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
-{
- // retrieve the key
- Value retval(self(iter)->key());
-
- // is this a numeric string?
- if (retval.isString())
- {
- // copy the key and the from the value
- *str_key = estrndup(retval.rawValue(), retval.size());
- *str_key_len = retval.size() + 1;
-
- // done
- return HASH_KEY_IS_STRING;
- }
- else
- {
- // convert to a numeric
- *int_key = retval.numericValue();
-
- // done
- return HASH_KEY_IS_LONG;
- }
-}
-
-/**
- * Step forwards to the next element
- * @param iter
- * @param tsrm_ls
- */
-void IteratorImpl::next(zend_object_iterator *iter TSRMLS_DC)
-{
- // call the next method
- self(iter)->next();
-}
-
-/**
- * Rewind the iterator back to the start
- * @param iter
- * @param tsrm_ls
- */
-void IteratorImpl::rewind(zend_object_iterator *iter TSRMLS_DC)
-{
- // call the rewind method
- self(iter)->rewind();
-}
-
-/**
- * Get access to all iterator functions
- * @return zend_object_iterator_funcs
- */
-zend_object_iterator_funcs *IteratorImpl::functions()
-{
- // static variable with all functions
- static zend_object_iterator_funcs funcs;
-
- // static variable that knows if the funcs are already initialized
- static bool initialized = false;
-
- // no need to set anything if already initialized
- if (initialized) return &funcs;
-
- // set the members
- funcs.dtor = &IteratorImpl::destructor;
- funcs.valid = &IteratorImpl::valid;
- funcs.get_current_data = &IteratorImpl::current;
- funcs.get_current_key = &IteratorImpl::key;
- funcs.move_forward = &IteratorImpl::next;
- funcs.rewind = &IteratorImpl::rewind;
-
- // invalidate is not yet supported
- funcs.invalidate_current = nullptr;
-
- // remember that functions are initialized
- initialized = true;
-
- // done
- return &funcs;
-}
-
-/**
- * End namespace
- */
-}
-