Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongo-php-library
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sinan
mongo-php-library
Commits
98fcbeab
Unverified
Commit
98fcbeab
authored
Nov 15, 2019
by
Andreas Braun
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #696
parents
32cfb9bb
964954e4
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
10 additions
and
27 deletions
+10
-27
CachingIterator.php
src/Model/CachingIterator.php
+9
-19
CachingIteratorTest.php
tests/Model/CachingIteratorTest.php
+1
-8
No files found.
src/Model/CachingIterator.php
View file @
98fcbeab
...
@@ -18,8 +18,8 @@
...
@@ -18,8 +18,8 @@
namespace
MongoDB\Model
;
namespace
MongoDB\Model
;
use
Countable
;
use
Countable
;
use
Generator
;
use
Iterator
;
use
Iterator
;
use
IteratorIterator
;
use
Traversable
;
use
Traversable
;
use
function
count
;
use
function
count
;
use
function
current
;
use
function
current
;
...
@@ -41,7 +41,7 @@ class CachingIterator implements Countable, Iterator
...
@@ -41,7 +41,7 @@ class CachingIterator implements Countable, Iterator
/** @var array */
/** @var array */
private
$items
=
[];
private
$items
=
[];
/** @var
Gen
erator */
/** @var
IteratorIt
erator */
private
$iterator
;
private
$iterator
;
/** @var boolean */
/** @var boolean */
...
@@ -61,7 +61,9 @@ class CachingIterator implements Countable, Iterator
...
@@ -61,7 +61,9 @@ class CachingIterator implements Countable, Iterator
*/
*/
public
function
__construct
(
Traversable
$traversable
)
public
function
__construct
(
Traversable
$traversable
)
{
{
$this
->
iterator
=
$this
->
wrapTraversable
(
$traversable
);
$this
->
iterator
=
new
IteratorIterator
(
$traversable
);
$this
->
iterator
->
rewind
();
$this
->
storeCurrentItem
();
$this
->
storeCurrentItem
();
}
}
...
@@ -101,8 +103,12 @@ class CachingIterator implements Countable, Iterator
...
@@ -101,8 +103,12 @@ class CachingIterator implements Countable, Iterator
public
function
next
()
public
function
next
()
{
{
if
(
!
$this
->
iteratorExhausted
)
{
if
(
!
$this
->
iteratorExhausted
)
{
$this
->
iteratorAdvanced
=
true
;
$this
->
iterator
->
next
();
$this
->
iterator
->
next
();
$this
->
storeCurrentItem
();
$this
->
storeCurrentItem
();
$this
->
iteratorExhausted
=
!
$this
->
iterator
->
valid
();
}
}
next
(
$this
->
items
);
next
(
$this
->
items
);
...
@@ -156,20 +162,4 @@ class CachingIterator implements Countable, Iterator
...
@@ -156,20 +162,4 @@ class CachingIterator implements Countable, Iterator
$this
->
items
[
$key
]
=
$this
->
iterator
->
current
();
$this
->
items
[
$key
]
=
$this
->
iterator
->
current
();
}
}
/**
* Wraps the Traversable with a Generator.
*
* @param Traversable $traversable
* @return Generator
*/
private
function
wrapTraversable
(
Traversable
$traversable
)
{
foreach
(
$traversable
as
$key
=>
$value
)
{
yield
$key
=>
$value
;
$this
->
iteratorAdvanced
=
true
;
}
$this
->
iteratorExhausted
=
true
;
}
}
}
tests/Model/CachingIteratorTest.php
View file @
98fcbeab
...
@@ -53,7 +53,7 @@ class CachingIteratorTest extends TestCase
...
@@ -53,7 +53,7 @@ class CachingIteratorTest extends TestCase
public
function
testPartialIterationDoesNotExhaust
()
public
function
testPartialIterationDoesNotExhaust
()
{
{
$traversable
=
$this
->
getTraversable
ThatThrows
([
1
,
2
,
new
Exception
()]);
$traversable
=
$this
->
getTraversable
([
1
,
2
,
new
Exception
()]);
$iterator
=
new
CachingIterator
(
$traversable
);
$iterator
=
new
CachingIterator
(
$traversable
);
$expectedKey
=
0
;
$expectedKey
=
0
;
...
@@ -110,13 +110,6 @@ class CachingIteratorTest extends TestCase
...
@@ -110,13 +110,6 @@ class CachingIteratorTest extends TestCase
}
}
private
function
getTraversable
(
$items
)
private
function
getTraversable
(
$items
)
{
foreach
(
$items
as
$item
)
{
yield
$item
;
}
}
private
function
getTraversableThatThrows
(
$items
)
{
{
foreach
(
$items
as
$item
)
{
foreach
(
$items
as
$item
)
{
if
(
$item
instanceof
Exception
)
{
if
(
$item
instanceof
Exception
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment