@@ -1677,182 +1677,6 @@ void php_phongo_new_regex_from_regex_and_options(zval *object, const char *patte
1677
1677
intern -> flags = estrndup (flags , intern -> flags_len );
1678
1678
} /* }}} */
1679
1679
1680
- static void php_phongo_cursor_free_current (php_phongo_cursor_t * cursor ) /* {{{ */
1681
- {
1682
- if (!Z_ISUNDEF (cursor -> visitor_data .zchild )) {
1683
- zval_ptr_dtor (& cursor -> visitor_data .zchild );
1684
- #if PHP_VERSION_ID >= 70000
1685
- ZVAL_UNDEF (& cursor -> visitor_data .zchild );
1686
- #else
1687
- cursor -> visitor_data .zchild = NULL ;
1688
- #endif
1689
- }
1690
- } /* }}} */
1691
-
1692
- void php_phongo_cursor_free (php_phongo_cursor_t * cursor ) /* {{{ */
1693
- {
1694
- if (cursor -> cursor ) {
1695
- mongoc_cursor_destroy (cursor -> cursor );
1696
- cursor -> cursor = NULL ;
1697
- }
1698
-
1699
- php_phongo_cursor_free_current (cursor );
1700
- } /* }}} */
1701
-
1702
- /* {{{ Iterator */
1703
- static void php_phongo_cursor_iterator_dtor (zend_object_iterator * iter TSRMLS_DC ) /* {{{ */
1704
- {
1705
- php_phongo_cursor_iterator * cursor_it = (php_phongo_cursor_iterator * )iter ;
1706
-
1707
- if (!Z_ISUNDEF (cursor_it -> intern .data )) {
1708
- #if PHP_VERSION_ID >= 70000
1709
- zval_ptr_dtor (& cursor_it -> intern .data );
1710
- #else
1711
- zval_ptr_dtor ((zval * * )& cursor_it -> intern .data );
1712
- cursor_it -> intern .data = NULL ;
1713
- #endif
1714
- }
1715
-
1716
- #if PHP_VERSION_ID < 70000
1717
- efree (cursor_it );
1718
- #endif
1719
- } /* }}} */
1720
-
1721
- static int php_phongo_cursor_iterator_valid (zend_object_iterator * iter TSRMLS_DC ) /* {{{ */
1722
- {
1723
- php_phongo_cursor_t * cursor = ((php_phongo_cursor_iterator * )iter )-> cursor ;
1724
-
1725
- if (!Z_ISUNDEF (cursor -> visitor_data .zchild )) {
1726
- return SUCCESS ;
1727
- }
1728
-
1729
- return FAILURE ;
1730
- } /* }}} */
1731
-
1732
- #if PHP_VERSION_ID < 50500
1733
- static int php_phongo_cursor_iterator_get_current_key (zend_object_iterator * iter , char * * str_key , uint * str_key_len , ulong * int_key TSRMLS_DC ) /* {{{ */
1734
- {
1735
- php_phongo_cursor_t * cursor = ((php_phongo_cursor_iterator * )iter )-> cursor ;
1736
-
1737
- * int_key = (ulong ) cursor -> current ;
1738
- return HASH_KEY_IS_LONG ;
1739
- } /* }}} */
1740
- #else
1741
- static void php_phongo_cursor_iterator_get_current_key (zend_object_iterator * iter , zval * key TSRMLS_DC ) /* {{{ */
1742
- {
1743
- php_phongo_cursor_t * cursor = ((php_phongo_cursor_iterator * )iter )-> cursor ;
1744
-
1745
- ZVAL_LONG (key , cursor -> current );
1746
- } /* }}} */
1747
- #endif
1748
-
1749
- #if PHP_VERSION_ID < 70000
1750
- static void php_phongo_cursor_iterator_get_current_data (zend_object_iterator * iter , zval * * * data TSRMLS_DC ) /* {{{ */
1751
- {
1752
- php_phongo_cursor_t * cursor = ((php_phongo_cursor_iterator * )iter )-> cursor ;
1753
-
1754
- * data = & cursor -> visitor_data .zchild ;
1755
- } /* }}} */
1756
- #else
1757
- static zval * php_phongo_cursor_iterator_get_current_data (zend_object_iterator * iter ) /* {{{ */
1758
- {
1759
- php_phongo_cursor_t * cursor = ((php_phongo_cursor_iterator * )iter )-> cursor ;
1760
-
1761
- return & cursor -> visitor_data .zchild ;
1762
- } /* }}} */
1763
- #endif
1764
-
1765
- static void php_phongo_cursor_iterator_move_forward (zend_object_iterator * iter TSRMLS_DC ) /* {{{ */
1766
- {
1767
- php_phongo_cursor_iterator * cursor_it = (php_phongo_cursor_iterator * )iter ;
1768
- php_phongo_cursor_t * cursor = cursor_it -> cursor ;
1769
- const bson_t * doc ;
1770
-
1771
- php_phongo_cursor_free_current (cursor );
1772
- cursor -> current ++ ;
1773
-
1774
- if (mongoc_cursor_next (cursor -> cursor , & doc )) {
1775
- phongo_bson_to_zval_ex (bson_get_data (doc ), doc -> len , & cursor -> visitor_data );
1776
- } else {
1777
- bson_error_t error ;
1778
-
1779
- if (mongoc_cursor_error (cursor -> cursor , & error )) {
1780
- /* Intentionally not destroying the cursor as it will happen
1781
- * naturally now that there are no more results */
1782
- phongo_throw_exception_from_bson_error_t (& error TSRMLS_CC );
1783
- }
1784
- }
1785
- } /* }}} */
1786
-
1787
- static void php_phongo_cursor_iterator_rewind (zend_object_iterator * iter TSRMLS_DC ) /* {{{ */
1788
- {
1789
- php_phongo_cursor_iterator * cursor_it = (php_phongo_cursor_iterator * )iter ;
1790
- php_phongo_cursor_t * cursor = cursor_it -> cursor ;
1791
- const bson_t * doc ;
1792
-
1793
- if (cursor -> current > 0 ) {
1794
- phongo_throw_exception (PHONGO_ERROR_LOGIC TSRMLS_CC , "Cursors cannot rewind after starting iteration" );
1795
- return ;
1796
- }
1797
-
1798
- php_phongo_cursor_free_current (cursor );
1799
-
1800
- doc = mongoc_cursor_current (cursor -> cursor );
1801
-
1802
- if (doc ) {
1803
- phongo_bson_to_zval_ex (bson_get_data (doc ), doc -> len , & cursor -> visitor_data );
1804
- }
1805
- } /* }}} */
1806
-
1807
- /* iterator handler table */
1808
- zend_object_iterator_funcs php_phongo_cursor_iterator_funcs = {
1809
- php_phongo_cursor_iterator_dtor ,
1810
- php_phongo_cursor_iterator_valid ,
1811
- php_phongo_cursor_iterator_get_current_data ,
1812
- php_phongo_cursor_iterator_get_current_key ,
1813
- php_phongo_cursor_iterator_move_forward ,
1814
- php_phongo_cursor_iterator_rewind ,
1815
- NULL /* invalidate_current is not used */
1816
- };
1817
-
1818
- zend_object_iterator * php_phongo_cursor_get_iterator (zend_class_entry * ce , zval * object , int by_ref TSRMLS_DC ) /* {{{ */
1819
- {
1820
- php_phongo_cursor_iterator * cursor_it = NULL ;
1821
- php_phongo_cursor_t * cursor = Z_CURSOR_OBJ_P (object );
1822
-
1823
- if (by_ref ) {
1824
- zend_error (E_ERROR , "An iterator cannot be used with foreach by reference" );
1825
- }
1826
-
1827
- if (cursor -> got_iterator ) {
1828
- phongo_throw_exception (PHONGO_ERROR_LOGIC TSRMLS_CC , "Cursors cannot yield multiple iterators" );
1829
- return NULL ;
1830
- }
1831
-
1832
- cursor -> got_iterator = 1 ;
1833
-
1834
- cursor_it = ecalloc (1 , sizeof (php_phongo_cursor_iterator ));
1835
- #if PHP_VERSION_ID >= 70000
1836
- zend_iterator_init (& cursor_it -> intern );
1837
- #endif
1838
-
1839
- #if PHP_VERSION_ID >= 70000
1840
- ZVAL_COPY (& cursor_it -> intern .data , object );
1841
- #else
1842
- Z_ADDREF_P (object );
1843
- cursor_it -> intern .data = (void * )object ;
1844
- #endif
1845
- cursor_it -> intern .funcs = & php_phongo_cursor_iterator_funcs ;
1846
- cursor_it -> cursor = cursor ;
1847
- /* cursor_it->current should already be allocated to zero */
1848
-
1849
- php_phongo_cursor_free_current (cursor_it -> cursor );
1850
-
1851
- return & cursor_it -> intern ;
1852
- } /* }}} */
1853
- /* }}} */
1854
-
1855
-
1856
1680
/* {{{ Memory allocation wrappers */
1857
1681
static void * php_phongo_malloc (size_t num_bytes ) /* {{{ */
1858
1682
{
0 commit comments