summaryrefslogtreecommitdiff
path: root/ext/intl/breakiterator/breakiterator_methods.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-02-26 16:42:49 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-06-24 15:31:41 +0200
commitff19ec2df3ef0dca8c29be83eddcde58234f4095 (patch)
treebc6477f4f4e696cf599ec82a0a6dbf221bc5bc10 /ext/intl/breakiterator/breakiterator_methods.cpp
parent4730b06f1d026047c63980298d358e28e2183de6 (diff)
downloadphp-git-ff19ec2df3ef0dca8c29be83eddcde58234f4095.tar.gz
Introduce InternalIterator
Userland classes that implement Traversable must do so either through Iterator or IteratorAggregate. The same requirement does not exist for internal classes: They can implement the internal get_iterator mechanism, without exposing either the Iterator or IteratorAggregate APIs. This makes them usable in get_iterator(), but incompatible with any Iterator based APIs. A lot of internal classes do this, because exposing the userland APIs is simply a lot of work. This patch alleviates this issue by providing a generic InternalIterator class, which acts as an adapater between get_iterator and Iterator, and can be easily used by many internal classes. At the same time, we extend the requirement that Traversable implies Iterator or IteratorAggregate to internal classes as well. Closes GH-5216.
Diffstat (limited to 'ext/intl/breakiterator/breakiterator_methods.cpp')
-rw-r--r--ext/intl/breakiterator/breakiterator_methods.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/ext/intl/breakiterator/breakiterator_methods.cpp b/ext/intl/breakiterator/breakiterator_methods.cpp
index 7e920fa39c..393290b66e 100644
--- a/ext/intl/breakiterator/breakiterator_methods.cpp
+++ b/ext/intl/breakiterator/breakiterator_methods.cpp
@@ -27,6 +27,7 @@ extern "C" {
#include "breakiterator_class.h"
#include "../locale/locale.h"
#include <zend_exceptions.h>
+#include <zend_interfaces.h>
}
using PHP::CodePointBreakIterator;
@@ -399,3 +400,12 @@ U_CFUNC PHP_METHOD(IntlBreakIterator, getErrorMessage)
message = intl_error_get_message(BREAKITER_ERROR_P(bio));
RETURN_STR(message);
}
+
+U_CFUNC PHP_METHOD(IntlBreakIterator, getIterator)
+{
+ if (zend_parse_parameters_none() == FAILURE) {
+ return;
+ }
+
+ zend_create_internal_iterator_zval(return_value, ZEND_THIS);
+}