acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
comparable_eq_range.h
1// From comparable_range by camilo on 2022-12-07 22:49 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5
6//template < typename RANGE_TYPE >
7//class comparable_eq_range :
8// public RANGE_TYPE
9//{
10//public:
11//
12//
13// using BASE_RANGE = RANGE_TYPE;
14//
15// using THIS_RANGE = ::comparable_eq_range < BASE_RANGE >;
16//
17//
18// using this_iterator = typename BASE_RANGE::this_iterator;
19// using iterator = typename BASE_RANGE::iterator;
20// using const_iterator = typename BASE_RANGE::const_iterator;
21//
22//
23// using THIS_RAW_RANGE = typename BASE_RANGE::THIS_RAW_RANGE;
24// using RAW_RANGE = typename BASE_RANGE::RAW_RANGE;
25// using CONST_RAW_RANGE = typename BASE_RANGE::CONST_RAW_RANGE;
26//
27//
28// using ITEM_POINTER = typename get_type_item_pointer < this_iterator >::type;
29//
30// using ITEM = dereference < ITEM_POINTER >;
31//
32//
33// //using BASE_RANGE::BASE_RANGE;
34//
35//
36// comparable_eq_range(no_initialize_t) : BASE_RANGE(no_initialize_t{}) {}
37// comparable_eq_range(nullptr_t) : BASE_RANGE(nullptr) {}
38// comparable_eq_range() {}
39// template<typed_range<iterator> RANGE>
40// comparable_eq_range(const RANGE &range) : BASE_RANGE(range) {}
41// template<typed_range<const_iterator> RANGE>
42// comparable_eq_range(const RANGE &range) : BASE_RANGE(range) {}
43// template < prototype_integral INTEGRAL >
44// comparable_eq_range(const_iterator begin, INTEGRAL count) : BASE_RANGE(begin, count) {}
45// comparable_eq_range(const_iterator begin, const_iterator end) : BASE_RANGE(begin, end) {}
46// comparable_eq_range(const_iterator begin) : BASE_RANGE(begin, find_first_null_character(begin)) {}
47//
48//
49// //template < prototype_range RANGE >
50// //comparable_eq_range & operator = (const RANGE & range) { BASE_RANGE::operator=(range); return *this; }
51// comparable_eq_range & operator = (const comparable_eq_range & range) { BASE_RANGE::operator=(range); return *this; }
52// comparable_eq_range & operator = (comparable_eq_range && range) { BASE_RANGE::operator=(::transfer(range)); return *this; }
53//
54// using BASE_RANGE::_equals;
55//
56// constexpr bool _equals(const CONST_RAW_RANGE & range) const
57// {
58//
59// return this->_equals(range, ::comparison::comparison < ITEM >());
60//
61// }
62//
63//
64// using BASE_RANGE::equals;
65//
66// constexpr bool equals(const CONST_RAW_RANGE & range) const
67// {
68//
69// return this->equals(range, ::comparison::comparison < ITEM >());
70//
71// }
72//
73//
74// using BASE_RANGE::_equals_start;
75//
76// constexpr bool _equals_start(const CONST_RAW_RANGE & range, memsize start) const
77// {
78//
79// return this->_equals_start(range, start, ::comparison::comparison < ITEM >());
80//
81// }
82//
83//
84// using BASE_RANGE::equals_start;
85//
86// constexpr bool equals_start(const CONST_RAW_RANGE & range, memsize start) const
87// {
88//
89// return this->equals_start(range, start, ::comparison::comparison < ITEM >());
90//
91// }
92//
93//
94// using BASE_RANGE::_equals_start_count;
95//
96// constexpr bool _equals_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
97// {
98//
99// return this->_equals_start_count(range, start, count, ::comparison::comparison < ITEM >());
100//
101// }
102//
103//
104// using BASE_RANGE::equals_start_count;
105//
106// constexpr bool equals_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
107// {
108//
109// return this->equals_start_count(range, start, count, ::comparison::comparison < ITEM >());
110//
111// }
112// using BASE_RANGE::_find;
113//
114// constexpr const_iterator _find(const CONST_RAW_RANGE & range) const
115// {
116//
117// return this->_find(range, ::comparison::comparison < ITEM >());
118//
119// }
120//
121//
122// using BASE_RANGE::find;
123//
124// constexpr const_iterator find(const CONST_RAW_RANGE & range) const
125// {
126//
127// return this->find(range, ::comparison::comparison < ITEM >());
128//
129// }
130//
131//
132// using BASE_RANGE::_find_start;
133//
134// constexpr const_iterator _find_start(const CONST_RAW_RANGE & range, memsize start) const
135// {
136//
137// return this->_find_start(range, start, ::comparison::comparison < ITEM >());
138//
139// }
140//
141//
142// using BASE_RANGE::find_start;
143//
144// constexpr const_iterator find_start(const CONST_RAW_RANGE & range, memsize start) const
145// {
146//
147// return this->find_start(range, start, ::comparison::comparison < ITEM >());
148//
149// }
150//
151//
152// using BASE_RANGE::_find_start_count;
153//
154// constexpr const_iterator _find_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
155// {
156//
157// return this->_find_start_count(range, start, count, ::comparison::comparison < ITEM >());
158//
159// }
160//
161//
162// using BASE_RANGE::find_start_count;
163//
164// constexpr const_iterator find_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
165// {
166//
167// return this->find_start_count(range, start, count, ::comparison::comparison < ITEM >());
168//
169// }
170//
171//
172// using BASE_RANGE::_rear_find;
173//
174// constexpr const_iterator _rear_find(const CONST_RAW_RANGE & range) const
175// {
176//
177// return this->_rear_find(range, ::comparison::comparison < ITEM >());
178//
179// }
180//
181//
182// using BASE_RANGE::rear_find;
183//
184// constexpr const_iterator rear_find(const CONST_RAW_RANGE & range) const
185// {
186//
187// return this->rear_find(range, ::comparison::comparison < ITEM >());
188//
189// }
190//
191//
192// using BASE_RANGE::_rear_find_start;
193//
194// constexpr const_iterator _rear_find_start(const CONST_RAW_RANGE & range, memsize start) const
195// {
196//
197// return this->_rear_find_start(range, start, ::comparison::comparison < ITEM >());
198//
199// }
200//
201//
202// using BASE_RANGE::rear_find_start;
203//
204// constexpr const_iterator rear_find_start(const CONST_RAW_RANGE & range, memsize start) const
205// {
206//
207// return this->rear_find_start(range, start, ::comparison::comparison < ITEM >());
208//
209// }
210//
211//
212// using BASE_RANGE::_rear_find_start_count;
213//
214// constexpr const_iterator _rear_find_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
215// {
216//
217// return this->_rear_find_start_count(range, start, count, ::comparison::comparison < ITEM >());
218//
219// }
220//
221//
222// using BASE_RANGE::rear_find_start_count;
223//
224// constexpr const_iterator rear_find_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
225// {
226//
227// return this->rear_find_start_count(range, start, count, ::comparison::comparison < ITEM >());
228//
229// }
230//
231//
232// using BASE_RANGE::_scan;
233//
234// constexpr const_iterator _scan(const CONST_RAW_RANGE & range) const
235// {
236//
237// return this->_scan(range, ::comparison::comparison < ITEM >());
238//
239// }
240//
241//
242// using BASE_RANGE::scan;
243//
244// constexpr const_iterator scan(const CONST_RAW_RANGE & range) const
245// {
246//
247// return this->scan(range, ::comparison::comparison < ITEM >());
248//
249// }
250//
251//
252// using BASE_RANGE::_scan_start;
253//
254// constexpr const_iterator _scan_start(const CONST_RAW_RANGE & range, memsize start) const
255// {
256//
257// return this->_scan_start(range, start, ::comparison::comparison < ITEM >());
258//
259// }
260//
261//
262// using BASE_RANGE::scan_start;
263//
264// constexpr const_iterator scan_start(const CONST_RAW_RANGE & range, memsize start) const
265// {
266//
267// return this->scan_start(range, start, ::comparison::comparison < ITEM >());
268//
269// }
270//
271//
272// using BASE_RANGE::_scan_start_count;
273//
274// constexpr const_iterator _scan_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
275// {
276//
277// return this->_scan_start_count(range, start, count, ::comparison::comparison < ITEM >());
278//
279// }
280//
281//
282// using BASE_RANGE::scan_start_count;
283//
284// constexpr const_iterator scan_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
285// {
286//
287// return this->scan_start_count(range, start, count, ::comparison::comparison < ITEM >());
288//
289// }
290//
291//
292//
293// using BASE_RANGE::_span;
294//
295// constexpr const_iterator _span(const CONST_RAW_RANGE & range) const
296// {
297//
298// return this->_span(range, ::comparison::comparison < ITEM >());
299//
300// }
301//
302//
303// using BASE_RANGE::span;
304//
305// constexpr const_iterator span(const CONST_RAW_RANGE & range) const
306// {
307//
308// return this->span(range, ::comparison::comparison < ITEM >());
309//
310// }
311//
312//
313// using BASE_RANGE::_span_start;
314//
315// constexpr const_iterator _span_start(const CONST_RAW_RANGE & range, memsize start) const
316// {
317//
318// return this->_span_start(range, start, ::comparison::comparison < ITEM >());
319//
320// }
321//
322//
323// using BASE_RANGE::span_start;
324//
325// constexpr const_iterator span_start(const CONST_RAW_RANGE & range, memsize start) const
326// {
327//
328// return this->span_start(range, start, ::comparison::comparison < ITEM >());
329//
330// }
331//
332//
333// using BASE_RANGE::_span_start_count;
334//
335// constexpr const_iterator _span_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
336// {
337//
338// return this->_span_start_count(range, start, count, ::comparison::comparison < ITEM >());
339//
340// }
341//
342//
343// using BASE_RANGE::span_start_count;
344//
345// constexpr const_iterator span_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
346// {
347//
348// return this->span_start_count(range, start, count, ::comparison::comparison < ITEM >());
349//
350// }
351//
352//
353// using BASE_RANGE::_rear_span;
354//
355// constexpr const_iterator _rear_span(const CONST_RAW_RANGE & range) const noexcept
356// {
357//
358// return this->_rear_span(range, ::comparison::comparison < ITEM >());
359//
360// }
361//
362//
363// using BASE_RANGE::rear_span;
364//
365// constexpr const_iterator rear_span(const CONST_RAW_RANGE & range) const noexcept
366// {
367//
368// return this->rear_span(range, ::comparison::comparison < ITEM >());
369//
370// }
371//
372//
373// using BASE_RANGE::rear_span_start;
374//
375// constexpr const_iterator rear_span_start(const CONST_RAW_RANGE & range, memsize start) const
376// {
377//
378// return this->rear_span_start(range, start, ::comparison::comparison < ITEM >());
379//
380// }
381//
382//
383// using BASE_RANGE::_rear_span_start_count;
384//
385// constexpr const_iterator _rear_span_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
386// {
387//
388// return this->_rear_span_start_count(range, start, count, ::comparison::comparison < ITEM >());
389//
390// }
391//
392//
393// using BASE_RANGE::rear_span_start_count;
394//
395// constexpr const_iterator rear_span_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
396// {
397//
398// return this->rear_span_start_count(range, start, count, ::comparison::comparison < ITEM >());
399//
400// }
401//
402// using BASE_RANGE::_skip;
403//
404// constexpr const_iterator _skip(const ITEM & item) const
405// {
406//
407// return this->_skip(item, ::comparison::comparison < ITEM >());
408//
409// }
410//
411//
412// using BASE_RANGE::skip;
413//
414// constexpr const_iterator skip(const ITEM & item) const
415// {
416//
417// return this->skip(item, ::comparison::comparison < ITEM >());
418//
419// }
420//
421//
422// using BASE_RANGE::_skip_start;
423//
424// constexpr const_iterator _skip_start(const ITEM & item, memsize start) const
425// {
426//
427// return this->_skip_start(item, start, ::comparison::comparison < ITEM >());
428//
429// }
430//
431//
432// using BASE_RANGE::skip_start;
433//
434// constexpr const_iterator skip_start(const ITEM & item, memsize start) const
435// {
436//
437// return this->skip_start(item, start, ::comparison::comparison < ITEM >());
438//
439// }
440//
441//
442// using BASE_RANGE::_skip_start_count;
443//
444// constexpr const_iterator _skip_start_count(const ITEM & item, memsize start, memsize count) const
445// {
446//
447// return this->_skip_start_count(item, start, count, ::comparison::comparison < ITEM >());
448//
449// }
450//
451//
452// using BASE_RANGE::skip_start_count;
453//
454// constexpr const_iterator skip_start_count(const ITEM & item, memsize start, memsize count) const
455// {
456//
457// return this->skip_start_count(item, start, count, ::comparison::comparison < ITEM >());
458//
459// }
460// using BASE_RANGE::_rear_find_item;
461//
462// constexpr const_iterator _rear_find_item(const ITEM & item) const
463// {
464//
465// return this->_rear_find_item(item, ::comparison::comparison < ITEM >());
466//
467// }
468//
469//
470// using BASE_RANGE::rear_find_item;
471//
472// constexpr const_iterator rear_find_item(const ITEM & item) const
473// {
474//
475// return this->rear_find_item(item, ::comparison::comparison < ITEM >());
476//
477// }
478//
479//
480// using BASE_RANGE::_rear_find_item_start;
481//
482// constexpr const_iterator _rear_find_item_start(const ITEM & item, memsize start) const
483// {
484//
485// return this->_rear_find_item_start(item, start, ::comparison::comparison < ITEM >());
486//
487// }
488//
489//
490// using BASE_RANGE::rear_find_item_start;
491//
492// constexpr const_iterator rear_find_item_start(const ITEM & item, memsize start) const
493// {
494//
495// return this->rear_find_item_start(item, start, ::comparison::comparison < ITEM >());
496//
497// }
498//
499//
500// using BASE_RANGE::_rear_find_item_start_count;
501//
502// constexpr const_iterator _rear_find_item_start_count(const ITEM & item, memsize start, memsize count) const
503// {
504//
505// return this->_rear_find_item_start_count(item, start, count, ::comparison::comparison < ITEM >());
506//
507// }
508//
509//
510// using BASE_RANGE::rear_find_item_start_count;
511//
512// constexpr const_iterator rear_find_item_start_count(const ITEM & item, memsize start, memsize count) const
513// {
514//
515// return this->rear_find_item_start_count(item, start, count, ::comparison::comparison < ITEM >());
516//
517// }
518//
519//
520//
521// using BASE_RANGE::_rear_scan;
522//
523// constexpr const_iterator _rear_scan(const CONST_RAW_RANGE & range) const noexcept
524// {
525//
526// return this->_rear_scan(range, ::comparison::comparison < ITEM >());
527//
528// }
529//
530//
531// using BASE_RANGE::rear_scan;
532//
533// constexpr const_iterator rear_scan(const CONST_RAW_RANGE & range) const noexcept
534// {
535//
536// return this->rear_scan(range, ::comparison::comparison < ITEM >());
537//
538// }
539//
540//
541// using BASE_RANGE::rear_scan_start;
542//
543// constexpr const_iterator rear_scan_start(const CONST_RAW_RANGE & range, memsize start) const
544// {
545//
546// return this->rear_scan_start(range, start, ::comparison::comparison < ITEM >());
547//
548// }
549//
550//
551// using BASE_RANGE::_rear_scan_start_count;
552//
553// constexpr const_iterator _rear_scan_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
554// {
555//
556// return this->_rear_scan_start_count(range, start, count, ::comparison::comparison < ITEM >());
557//
558// }
559//
560//
561// using BASE_RANGE::rear_scan_start_count;
562//
563// constexpr const_iterator rear_scan_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
564// {
565//
566// return this->rear_scan_start_count(range, start, count, ::comparison::comparison < ITEM >());
567//
568// }
569//
570//
571// using BASE_RANGE::_begins;
572//
573// constexpr bool _begins(const CONST_RAW_RANGE & range) const
574// {
575//
576// return this->_begins(range, ::comparison::comparison < ITEM >());
577//
578// }
579//
580//
581// using BASE_RANGE::begins;
582//
583// constexpr bool begins(const CONST_RAW_RANGE & range) const
584// {
585//
586// return this->begins(range, ::comparison::comparison < ITEM >());
587//
588// }
589//
590//
591// using BASE_RANGE::_begins_start;
592//
593// constexpr bool _begins_start(const CONST_RAW_RANGE & range, memsize start) const
594// {
595//
596// return this->_begins_start(range, start, ::comparison::comparison < ITEM >());
597//
598// }
599//
600//
601// using BASE_RANGE::begins_start;
602//
603// constexpr bool begins_start(const CONST_RAW_RANGE & range, memsize start) const
604// {
605//
606// return this->begins_start(range, start, ::comparison::comparison < ITEM >());
607//
608// }
609//
610//
611// using BASE_RANGE::_begins_start_count;
612//
613// constexpr bool _begins_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
614// {
615//
616// return this->_begins_start_count(range, start, count, ::comparison::comparison < ITEM >());
617//
618// }
619//
620//
621// using BASE_RANGE::begins_start_count;
622//
623// constexpr bool begins_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
624// {
625//
626// return this->begins_start_count(range, start, count, ::comparison::comparison < ITEM >());
627//
628// }
629//
630//
631//
632// using BASE_RANGE::_ends;
633//
634// constexpr bool _ends(const CONST_RAW_RANGE & range) const
635// {
636//
637// return this->_ends(range, ::comparison::comparison < ITEM >());
638//
639// }
640//
641//
642// using BASE_RANGE::ends;
643//
644// constexpr bool ends(const CONST_RAW_RANGE & range) const
645// {
646//
647// return this->ends(range, ::comparison::comparison < ITEM >());
648//
649// }
650//
651//
652// using BASE_RANGE::_ends_start;
653//
654// constexpr bool _ends_start(const CONST_RAW_RANGE & range, memsize start) const
655// {
656//
657// return this->_ends_start(range, start, ::comparison::comparison < ITEM >());
658//
659// }
660//
661//
662// using BASE_RANGE::ends_start;
663//
664// constexpr bool ends_start(const CONST_RAW_RANGE & range, memsize start) const
665// {
666//
667// return this->ends_start(range, start, ::comparison::comparison < ITEM >());
668//
669// }
670//
671//
672// using BASE_RANGE::_ends_start_count;
673//
674// constexpr bool _ends_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
675// {
676//
677// return this->_ends_start_count(range, start, count, ::comparison::comparison < ITEM >());
678//
679// }
680//
681//
682// using BASE_RANGE::ends_start_count;
683//
684// constexpr bool ends_start_count(const CONST_RAW_RANGE & range, memsize start, memsize count) const
685// {
686//
687// return this->ends_start_count(range, start, count, ::comparison::comparison < ITEM >());
688//
689// }
690//
691//
692//};
693//
694
695//template < typename this_iterator >
696//using range = comparable_range < range_base < this_iterator > >;
697
698//
699//template < typename BASE_RANGE >
700//class comparable_range :
701// public comparable_range < BASE_RANGE >
702//{
703//public:
704//
705// using this_iterator = BASE_RANGE::ITERATOR_TYPE;
706//
707// using ITEM = this_iterator::ITEM;
708//
709//
710// using this_iterator = this_iterator::this_iterator;
711//
712// using CONST_RAW_RANGE = range < this_iterator >;
713//
714// using ITERATOR_TYPE = this_iterator;
715//
716// using this_iterator = this_iterator::this_iterator;
717//
718// typedef this_iterator const_iterator;
719//
720// bool m_bDeclaredNullTerminated = false;
721//
722//
723//
724// using comparable_range < BASE_RANGE >::comparable_range;
725//
726//
727// comparable_range(const ITEM * pitem) : range(pitem, find_first_null_character(data)), m_bDeclaredNullTerminated(true) {}
728// comparable_range(this_iterator data) : comparable_range((const ITEM *)data) {}
729//
730//
731// using comparable_range < BASE_RANGE >::_equals;
732//
733// constexpr bool _equals(const CONST_RAW_RANGE & range) const
734// {
735//
736// return _equals(range, ::comparison::comparison < ITEM >());
737//
738// }
739//
740// using comparable_range < BASE_RANGE >::equals;
741//
742// constexpr bool equals(const CONST_RAW_RANGE & range) const
743// {
744//
745// return range<const ITEM>(*this).compare(range, equals <const ITEM>);
746//
747// }
748//
749//
750// using comparable_range < BASE_RANGE >::_order;
751//
752// constexpr ::std::strong_ordering _order(const CONST_RAW_RANGE & range) const
753// {
754//
755// return _order(range, ::compare_const_reference < ITEM >);
756//
757// }
758//
759// using comparable_range < BASE_RANGE >::compare;
760//
761// constexpr ::std::strong_ordering compare(const CONST_RAW_RANGE & range) const
762// {
763//
764// return range<const ITEM>(*this).compare(range, compare_const_reference <const ITEM>);
765//
766// }
767//
768//
769// constexpr ::std::strong_ordering operator<=>(const CONST_RAW_RANGE & range) const
770// {
771//
772// return compare(range, ::compare_const_reference < ITEM >);
773//
774// }
775//
776//
777// using comparable_range < BASE_RANGE >::find;
778//
779//
780// this_iterator find(const CONST_RAW_RANGE & range, character_count iStart = 0, character_count nCount = -1, this_iterator * ppszTail = nullptr) const RELEASENOTHROW
781// {
782//
783// return find(range, iStart, nCount, ppszTail, ::comparison::comparison < ITEM >());
784//
785// }
786//
787//
788// using comparable_range < BASE_RANGE >::_scan;
789//
790// constexpr this_iterator _scan(const CONST_RAW_RANGE & range) noexcept
791// {
792//
793// return _scan(range, ::comparison::comparison < ITEM >());
794//
795// }
796//
797// using comparable_range < BASE_RANGE >::scan;
798//
799// constexpr this_iterator scan(const CONST_RAW_RANGE & range) noexcept
800// {
801//
802// return scan(range, ::comparison::comparison < ITEM >());
803//
804// }
805//
806// using comparable_range < BASE_RANGE >::_span;
807//
808// constexpr this_iterator _span(const CONST_RAW_RANGE & range) noexcept
809// {
810//
811// return _span(range, ::comparison::comparison < ITEM >());
812//
813// }
814//
815// using comparable_range < BASE_RANGE >::span;
816//
817// constexpr this_iterator span(const CONST_RAW_RANGE & range) noexcept
818// {
819//
820// return span(range, ::comparison::comparison < ITEM >());
821//
822// }
823//
824// using comparable_range < BASE_RANGE >::_skip;
825//
826// constexpr this_iterator _skip(const ITEM & item) noexcept
827// {
828//
829// return _skip(item, ::comparison::comparison < ITEM >());
830//
831// }
832//
833// using comparable_range < BASE_RANGE >::skip;
834//
835// constexpr this_iterator skip(const ITEM & item) noexcept
836// {
837//
838// return skip(item, ::comparison::comparison < ITEM >());
839//
840// }
841//
842// using comparable_range < BASE_RANGE >::_rear_find_item;
843//
844// constexpr this_iterator _rear_find_item(ITEM item) noexcept
845// {
846//
847// return _rear_find_item(item, ::comparison::comparison < ITEM >());
848//
849// }
850//
851//
852// using comparable_range < BASE_RANGE >::rear_find_item;
853//
854// constexpr this_iterator rear_find_item(ITEM item) noexcept
855// {
856//
857// return rear_find_item(item, ::comparison::comparison < ITEM >());
858//
859// }
860//
861// using comparable_range < BASE_RANGE >::_rear_scan;
862//
863// constexpr this_iterator _rear_scan(const CONST_RAW_RANGE & range) noexcept
864// {
865//
866// return _rear_scan(range, ::comparison::comparison < ITEM >());
867//
868// }
869//
870// using comparable_range < BASE_RANGE >::rear_scan;
871//
872// constexpr this_iterator rear_scan(const CONST_RAW_RANGE & range) noexcept
873// {
874//
875// return rear_scan(range, ::comparison::comparison < ITEM >());
876//
877// }
878//
879//};
880//
881//
882//
883
884
885//template < typename ITEM >
886//inline bool _range_begins(::range < const ITEM * > range, ::range < const ITEM * > rangePrefix)
887//{
888//
889// return range._begins(rangePrefix);
890//
891//}
892//template < typename ITEM >
893//inline bool range_begins(::range < const ITEM * > range, ::range < const ITEM * > rangePrefix)
894//{
895//
896// return range.begins(rangePrefix);
897//
898//}
899//template < typename ITEM >
900//inline bool _range_ends(::range < const ITEM * > range, ::range < const ITEM * > rangeSuffix)
901//{
902//
903// return range._ends(rangeSuffix);
904//
905//}
906//template < typename ITEM, ::comparison::equality < ITEM > EQUALITY >
907//inline bool range_ends(::range < const ITEM * > range, ::range < const ITEM * > rangeSuffix, EQUALITY equality)
908//{
909//
910// return range.ends(rangeSuffix);
911//
912//}
913