1: <?php
2:
3: namespace Chromabits\Nucleus\Data\Interfaces;
4:
5: use Chromabits\Nucleus\Control\Maybe;
6: use Chromabits\Nucleus\Meditation\Constraints\AbstractTypeConstraint;
7:
8: /**
9: * Interface IterableInterface
10: *
11: * @author Eduardo Trujillo <ed@chromabits.com>
12: * @package Chromabits\Nucleus\Data\Interfaces
13: */
14: interface IterableInterface extends LeftFoldableInterface, FoldableInterface
15: {
16: /**
17: * @return AbstractTypeConstraint
18: */
19: public function getKeyType();
20:
21: /**
22: * @return AbstractTypeConstraint
23: */
24: public function getValueType();
25:
26: /**
27: * @param mixed $key
28: *
29: * @return Maybe
30: */
31: public function lookup($key);
32:
33: /**
34: * @param mixed $key
35: *
36: * @return bool
37: */
38: public function member($key);
39:
40: /**
41: * @param mixed $value
42: *
43: * @return bool
44: */
45: public function includes($value);
46:
47: /**
48: * @return mixed
49: */
50: public function head();
51:
52: /**
53: * @return mixed
54: */
55: public function last();
56:
57: /**
58: * @param array|IterableInterface $searchKeyPath
59: *
60: * @return Maybe
61: */
62: public function lookupIn($searchKeyPath);
63:
64: /**
65: * @param array|IterableInterface $searchKeyPath
66: *
67: * @return bool
68: */
69: public function memberIn($searchKeyPath);
70:
71: /**
72: * @return array
73: */
74: public function toArray();
75:
76: /**
77: * @param callable $callable
78: *
79: * @return IterableInterface
80: */
81: public function fmap(callable $callable);
82:
83: /**
84: * @param callable $callable
85: *
86: * @return static|IterableInterface
87: */
88: public function map(callable $callable);
89:
90: /**
91: * @param callable $callable
92: *
93: * @return IterableInterface
94: */
95: public function filter(callable $callable);
96:
97: /**
98: * @param callable $callable
99: *
100: * @return IterableInterface
101: */
102: public function filterNot(callable $callable);
103:
104: /**
105: * @return IterableInterface
106: */
107: public function reverse();
108:
109: /**
110: * @param callable $comparator
111: *
112: * @return IterableInterface
113: */
114: public function sort(callable $comparator = null);
115:
116: /**
117: * @param callable $comparatorValueMapper
118: * @param callable|null $comparator
119: *
120: * @return IterableInterface
121: */
122: public function sortBy(
123: callable $comparatorValueMapper,
124: callable $comparator = null
125: );
126:
127: /**
128: * @param callable $sideEffect
129: *
130: * @return int
131: */
132: public function each(callable $sideEffect);
133:
134: /**
135: * @param int $begin
136: * @param int|null $end
137: *
138: * @return IterableInterface
139: */
140: public function slice($begin, $end = null);
141:
142: /**
143: * @return IterableInterface
144: */
145: public function tail();
146:
147: /**
148: * @return IterableInterface
149: */
150: public function init();
151:
152: /**
153: * @param int $amount
154: *
155: * @return IterableInterface
156: */
157: public function take($amount);
158:
159: /**
160: * @param int $amount
161: *
162: * @return IterableInterface
163: */
164: public function takeLast($amount);
165:
166: /**
167: * @param callable $predicate
168: *
169: * @return IterableInterface
170: */
171: public function takeWhile(callable $predicate);
172:
173: /**
174: * @param callable $predicate
175: *
176: * @return IterableInterface
177: */
178: public function takeUntil(callable $predicate);
179:
180: /**
181: * @return int
182: */
183: public function count();
184:
185: /**
186: * @param callable $predicate
187: *
188: * @return Maybe
189: */
190: public function find(callable $predicate);
191:
192: /**
193: * @param callable $predicate
194: *
195: * @return Maybe
196: */
197: public function findLast(callable $predicate);
198:
199: /**
200: * @return MapInterface
201: */
202: public function toMap();
203:
204: /**
205: * @return ListInterface
206: */
207: public function toList();
208:
209: /**
210: * @return ListInterface
211: */
212: public function keys();
213:
214: /**
215: * @return ListInterface
216: */
217: public function values();
218:
219: /**
220: * @return ListInterface
221: */
222: public function entries();
223: }
224: