SheafSystem  0.0.0.0
filtered_depth_first_itr.impl.h
Go to the documentation of this file.
1 
2 //
3 // Copyright (c) 2014 Limit Point Systems, Inc.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 
20 
21 #ifndef FILTERED_DEPTH_FIRST_ITR_IMPL_H
22 #define FILTERED_DEPTH_FIRST_ITR_IMPL_H
23 
24 #ifndef FILTERED_DEPTH_FIRST_ITR_H
25 #include "SheafSystem/filtered_depth_first_itr.h"
26 #endif
27 
28 #ifndef POSET_STATE_HANDLE_H
29 #include "SheafSystem/poset_state_handle.h"
30 #endif
31 
32 #ifndef ASSERT_CONTRACT_H
33 #include "SheafSystem/assert_contract.h"
34 #endif
35 
36 #ifndef SUBPOSET_H
37 #include "SheafSystem/subposet.h"
38 #endif
39 
40 #ifndef ZN_TO_BOOL_H
41 #include "SheafSystem/zn_to_bool.h"
42 #endif
43 
44 #ifndef SHEAF_DLL_SPEC_H
45 #include "SheafSystem/sheaf_dll_spec.h"
46 #endif
47 
48 //#define DIAGNOSTIC_OUTPUT
49 //#undef DIAGNOSTIC_OUTPUT
50 
51 namespace sheaf
52 {
53 
54 // ===========================================================
55 // FILTERED_DEPTH_FIRST_ITR FACET
56 // ===========================================================
57 
58 // PUBLIC MEMBER FUNCTIONS
59 
60 template <typename T>
64 {
65  // Preconditions:
66 
67  // Body:
68 
69  // Postconditions:
70 
71  ensure(invariant());
72  ensure(this->order() == depth_first_itr<T>::NOT_AN_ORDER);
73  ensure(!this->is_initialized());
74  ensure(this->descending());
75  ensure(!this->strict());
76  ensure(this->visit_once());
77 
78  // Exit
79 
80  return;
81 }
82 
83 template <typename T>
86  : depth_first_itr<T>::depth_first_itr(xother)
87 {
88  // Preconditions:
89 
90  // Body:
91 
92  // Postconditions:
93 
94  ensure(invariant());
95  ensure(this->order() == xother.order());
96  ensure(this->is_initialized() == xother.is_initialized());
97  ensure(this->is_initialized() ? this->anchor().is_same_state(&xother.anchor()) : true);
98  ensure(this->is_initialized() ? this->anchor().version() == xother.anchor().version() : true);
99  ensure(this->is_initialized() ? this->filter().is_same_state(&(const_cast<filtered_depth_first_itr&>(xother).filter())) : true);
100  ensure(this->is_initialized() ? this->descending() == xother.descending() : true);
101  ensure(this->is_initialized() ? this->strict() == xother.strict() : true);
102  ensure(this->visit_once() == xother.visit_once());
103  ensure(unexecutable(this is first member of iteration or is_done()));
104 
105  // Exit
106 
107  return;
108 }
109 
110 template <typename T>
114 {
115 
116  // Preconditions:
117 
118  // Body:
119 
121 
122  // Postconditions:
123 
124  ensure(invariant());
125  ensure(this->order() == xother.order());
126  ensure(this->is_initialized() == xother.is_initialized());
127  ensure(this->is_initialized() ? this->anchor().is_same_state(&xother.anchor()) : true);
128  ensure(this->is_initialized() ? this->anchor().version() == xother.anchor().version() : true);
129  ensure(this->is_initialized() ? this->filter().is_same_state(&(const_cast<filtered_depth_first_itr&>(xother).filter())) : true);
130  ensure(this->is_initialized() ? this->descending() == xother.descending() : true);
131  ensure(this->is_initialized() ? this->strict() == xother.strict() : true);
132  ensure(this->visit_once() == xother.visit_once());
133  ensure(unexecutable(this is first member of iteration or is_done()));
134 
135 
136  // Exit
137 
138  return *this;
139 }
140 
141 template <typename T>
144 {
145  // Preconditions:
146 
147  // Body:
148 
149  // Postconditions:
150 
151  // Exit:
152 
153  return;
154 }
155 
156 // OTHER CONSTRUCTORS
157 
158 template <typename T>
161  bool xdown,
162  bool xstrict,
163  typename depth_first_itr<T>::order_type xorder)
164 {
165 
166  // Preconditions:
167 
168  require(xanchor.state_is_read_accessible());
169  require(xorder != depth_first_itr<T>::NOT_AN_ORDER);
170 
171 
172  // Body:
173 
174  // Initialize the order, dir, and strictness
175 
176  this->initialize_order(xorder);
177  this->_descending = xdown;
178  this->_strict = xstrict;
179 
180  // Initialize the anchor and filter. Then, reset.
181 
182  this->_anchor = 0;
183  this->_new_filter = false;
184  put_anchor(&xanchor);
185  put_filter(xanchor.version_index());
186  this->reset();
187 
188  // Postconditions:
189 
190  ensure(invariant());
191  ensure(this->is_initialized());
192  ensure(this->anchor().is_same_state(&xanchor));
193  ensure(this->anchor().is_same_type(&xanchor));
194  ensure(this->anchor().version() == xanchor.version());
195  ensure(this->filter().is_attached());
196  ensure(this->descending() == xdown);
197  ensure(this->strict() == xstrict);
198  ensure(this->strict() && !this->is_done() ? this->index() !=~ this->anchor().index() : true);
199  ensure(this->visit_once());
200  ensure(unexecutable(!this->is_done() implies this is first member));
201 
202  return;
203 }
204 
205 template <typename T>
208  const subposet& xfilter,
209  bool xdown,
210  bool xstrict,
211  typename depth_first_itr<T>::order_type xorder)
212 {
213 
214  // Preconditions:
215 
216  require(xanchor.state_is_read_accessible());
217  require(xanchor.host()->includes_subposet(&xfilter));
218  require(xorder != depth_first_itr<T>::NOT_AN_ORDER);
219 
220 
221  // Body:
222 
223  // Initialize the order, dir, and strictness
224 
225  this->initialize_order(xorder);
226  this->_descending = xdown;
227  this->_strict = xstrict;
228 
229  // Initialize the anchor and filter. Then, reset.
230 
231  this->_anchor = 0;
232  this->_new_filter = false;
233  put_anchor(&xanchor);
234  put_filter(xfilter);
235  this->reset();
236 
237  // Postconditions:
238 
239  ensure(invariant());
240  ensure(this->is_initialized());
241  ensure(this->anchor().is_same_state(&xanchor));
242  ensure(this->anchor().is_same_type(&xanchor));
243  ensure(this->anchor().version() == xanchor.version());
244  ensure(this->filter().is_attached());
245  ensure(this->descending() == xdown);
246  ensure(this->strict() == xstrict);
247  ensure(this->strict() && !this->is_done() ? this->index() !=~ this->anchor().index() : true);
248  ensure(this->visit_once());
249  ensure(unexecutable(!this->is_done() implies this is first member));
250 
251  return;
252 }
253 
254 template <typename T>
257  pod_index_type xfilter_index,
258  bool xdown,
259  bool xstrict,
260  typename depth_first_itr<T>::order_type xorder)
261 {
262 
263  // Preconditions:
264 
265  require(xanchor.state_is_read_accessible());
266  require(xanchor.host()->includes_subposet(xfilter_index));
267  require(xorder != depth_first_itr<T>::NOT_AN_ORDER);
268 
269 
270  // Body:
271 
272  // Initialize the order, dir, and strictness
273 
274  this->initialize_order(xorder);
275  this->_descending = xdown;
276  this->_strict = xstrict;
277 
278  // Initialize the anchor and filter. Then, reset.
279 
280  this->_anchor = 0;
281  this->_new_filter = false;
282  put_anchor(&xanchor);
283  put_filter(xfilter_index);
284  this->reset();
285 
286  // Postconditions:
287 
288  ensure(invariant());
289  ensure(this->is_initialized());
290  ensure(this->anchor().is_same_state(&xanchor));
291  ensure(this->anchor().is_same_type(&xanchor));
292  ensure(this->anchor().version() == xanchor.version());
293  ensure(this->filter().is_attached());
294  ensure(this->strict() == xstrict);
295  ensure(this->strict() && !this->is_done() ? this->index() !=~ this->anchor().index() : true);
296  ensure(this->visit_once());
297  ensure(unexecutable(!this->is_done() implies this is first member));
298 
299  return;
300 }
301 
302 template <typename T>
305  const scoped_index& xfilter_index,
306  bool xdown,
307  bool xstrict,
308  typename depth_first_itr<T>::order_type xorder)
309 {
310  // Preconditions:
311 
312  require(xanchor.state_is_read_accessible());
313  require(xanchor.host()->includes_subposet(xfilter_index));
314  require(xorder != depth_first_itr<T>::NOT_AN_ORDER);
315 
316  // Body:
317 
318  // Initialize the order, dir, and strictness
319 
320  this->initialize_order(xorder);
321  this->_descending = xdown;
322  this->_strict = xstrict;
323 
324  // Initialize the anchor and filter. Then, reset.
325 
326  this->_anchor = 0;
327  this->_new_filter = false;
328  put_anchor(&xanchor);
329  put_filter(xfilter_index.hub_pod());
330  this->reset();
331 
332  // Postconditions:
333 
334  ensure(invariant());
335  ensure(this->is_initialized());
336  ensure(this->anchor().is_same_state(&xanchor));
337  ensure(this->anchor().is_same_type(&xanchor));
338  ensure(this->anchor().version() == xanchor.version());
339  ensure(this->filter().is_attached());
340  ensure(this->strict() == xstrict);
341  ensure(this->strict() && !this->is_done() ? this->index() !=~ this->anchor().index() : true);
342  ensure(this->visit_once());
343  ensure(unexecutable(!this->is_done() implies this is first member));
344 
345  return;
346 }
347 
348 template <typename T>
351  const std::string& xfilter_name,
352  bool xdown,
353  bool xstrict,
354  typename depth_first_itr<T>::order_type xorder)
355 {
356  // Preconditions:
357 
358  require(xanchor.state_is_read_accessible());
359  require(!xfilter_name.empty() ? xanchor.host()->includes_subposet(xfilter_name) : true);
360  require(xorder != depth_first_itr<T>::NOT_AN_ORDER);
361 
362  // Body:
363 
364  // Initialize the order, dir, and strictness
365 
366  this->initialize_order(xorder);
367  this->_descending = xdown;
368  this->_strict = xstrict;
369 
370  // Initialize the anchor and filter. Then, reset.
371 
372  this->_anchor = 0;
373  this->_new_filter = false;
374  put_anchor(&xanchor);
375  put_filter(xfilter_name);
376  this->reset();
377 
378  // Postconditions:
379 
380  ensure(invariant());
381  ensure(this->is_initialized());
382  ensure(this->anchor().is_same_state(&xanchor));
383  ensure(this->anchor().is_same_type(&xanchor));
384  ensure(this->anchor().version() == xanchor.version());
385  ensure(this->filter().is_attached());
386  ensure(!xfilter_name.empty() ?
387  this->filter().name() == xfilter_name :
388  this->filter().name() == this->anchor().version_name());
389  ensure(this->descending() == xdown);
390  ensure(this->strict() == xstrict);
391  ensure(this->strict() && !this->is_done() ? this->index() !=~ this->anchor().index() : true);
392  ensure(this->visit_once());
393  ensure(unexecutable(!this->is_done() implies this is first member));
394 
395  return;
396 }
397 
398 // PROTECTED MEMBER FUNCTIONS
399 
400 // PRIVATE MEMBER FUNCTIONS
401 
402 
403 // ===========================================================
404 // ITERATOR FACET
405 // ===========================================================
406 
407 // PUBLIC MEMBER FUNCTIONS
408 
409 template <typename T>
410 void
413 {
414  // Preconditions:
415 
416  require(xanchor != 0);
417  require(this->anchor_is_ancestor_of(*xanchor));
418  require(xanchor->state_is_read_accessible());
419 
420  // Body:
421 
422  define_old_variable(bool old_descending = this->_descending);
423  define_old_variable(bool old_strict = this->_strict);
424 
425  // Force iterator into a known clean state;
426  // also forces client to reset before using this.
427 
428  this->force_is_done();
429 
430  // Now (re)initialize.
431 
432  this->initialize_traversal(*xanchor);
433 
434  // Postconditions:
435 
436  ensure(invariant());
437  ensure(this->is_initialized());
438  ensure(this->is_done());
439  ensure(this->anchor().is_same_state(xanchor));
440  ensure(this->anchor().is_same_type(xanchor));
441  ensure(this->anchor().version() == xanchor->version());
442  ensure(this->filter().index() == this->anchor().version_index());
443  ensure(this->descending() == old_descending);
444  ensure(this->strict() == old_strict);
445 
446  // Exit:
447 
448 }
449 
450 template <typename T>
451 void
454 {
455  // Preconditions:
456 
457  require(this->is_initialized());
458  require(this->anchor().state_is_read_accessible());
459  require(this->anchor().host()->contains_member(xanchor_index));
460 
461  // Body:
462 
463  define_old_variable(bool old_descending = this->_descending);
464  define_old_variable(bool old_strict = this->_strict);
465  define_old_variable(scoped_index old_filter_index = this->filter().index());
466  define_old_variable(int old_anchor_version = this->anchor().version());
467 
468  // Force iterator into a known clean state;
469  // also forces client to reset before using this.
470 
471  this->force_is_done();
472 
473  // Now reinitialize.
474 
475  this->initialize_traversal(xanchor_index);
476 
477  // Postconditions:
478 
479  ensure(invariant());
480  ensure(this->is_initialized());
481  ensure(this->is_done());
482  ensure(this->anchor().index() == xanchor_index);
483  ensure(this->anchor().version() == old_anchor_version);
484  ensure(this->filter().index() == old_filter_index);
485  ensure(this->descending() == old_descending);
486  ensure(this->strict() == old_strict);
487 
488  // Exit:
489 
490 }
491 
492 template <typename T>
493 void
495 put_anchor(const scoped_index& xanchor_index)
496 {
497  // Preconditions:
498 
499  require(this->is_initialized());
500  require(this->anchor().state_is_read_accessible());
501  require(this->anchor().host()->contains_member(xanchor_index));
502 
503  // Body:
504 
505  define_old_variable(bool old_descending = this->_descending);
506  define_old_variable(bool old_strict = this->_strict);
507  define_old_variable(scoped_index old_filter_index = this->filter().index());
508  define_old_variable(int old_anchor_version = this->anchor().version());
509 
510  put_anchor(xanchor_index.hub_pod());
511 
512  // Postconditions:
513 
514  ensure(invariant());
515  ensure(this->is_initialized());
516  ensure(this->is_done());
517  ensure(this->anchor().index() ==~ xanchor_index);
518  ensure(this->anchor().version() == old_anchor_version);
519  ensure(this->filter().index() == old_filter_index);
520  ensure(this->descending() == old_descending);
521  ensure(this->strict() == old_strict);
522 
523  // Exit:
524 
525 }
526 
527 template <typename T>
528 void
530 put_descending(bool xdescending)
531 {
532  // Preconditions:
533 
534  // Body:
535 
536  this->_descending = xdescending;
537 
538  // Postconditions:
539 
540  ensure(this->descending() == xdescending);
541 
542  // Exit
543 
544  return;
545 }
546 
547 template <typename T>
548 void
550 put_strict(bool xstrict)
551 {
552  // Preconditions:
553 
554  // Body:
555 
556  this->_strict = xstrict;
557 
558  // Postconditions:
559 
560  ensure(this->strict() == xstrict);
561 
562  // Exit
563 
564  return;
565 }
566 
567 template <typename T>
568 void
570 put_filter(const subposet& xfilter)
571 {
572 
573  // Preconditions:
574 
575  require(this->is_initialized());
576  require(this->anchor().state_is_read_accessible());
577  require(this->anchor().host()->includes_subposet(&xfilter));
578 
579  // Body:
580 
581  define_old_variable(bool old_descending = this->_descending);
582  define_old_variable(bool old_strict = this->_strict);
583 
584  // Force iterator into a known clean state;
585  // also forces client to reset before using this.
586 
587  this->force_is_done();
588 
589  // Now reinitialize.
590 
591  this->initialize_filter(xfilter);
592 
593  // Postconditions:
594 
595  ensure(invariant());
596  ensure(this->is_initialized());
597  ensure(this->filter().is_same_state(&xfilter));
598  ensure(this->descending() == old_descending);
599  ensure(this->strict() == old_strict);
600  ensure(this->is_done());
601 
602  return;
603 }
604 
605 template <typename T>
606 void
608 put_filter(const std::string& xfilter_name)
609 {
610 
611  // Preconditions:
612 
613  require(this->is_initialized());
614  require(this->anchor().state_is_read_accessible());
615  require(!xfilter_name.empty() ? this->anchor().host()->includes_subposet(xfilter_name) : true);
616 
617  // Body:
618 
619  define_old_variable(bool old_descending = this->_descending);
620  define_old_variable(bool old_strict = this->_strict);
621 
622  // Force iterator into a known clean state;
623  // also forces client to reset before using this.
624 
625  this->force_is_done();
626 
627  // Now reinitialize.
628 
629  this->initialize_filter(xfilter_name);
630 
631  // Postconditions:
632 
633  ensure(invariant());
634  ensure(this->is_initialized());
635  ensure(this->is_done());
636  ensure(!xfilter_name.empty() ?
637  this->filter().name() == xfilter_name :
638  this->filter().name() == this->anchor().version_name());
639  ensure(this->descending() == old_descending);
640  ensure(this->strict() == old_strict);
641 
642  return;
643 }
644 
645 template <typename T>
646 void
649 {
650  // Preconditions:
651 
652  require(this->is_initialized());
653  require(this->anchor().state_is_read_accessible());
654  require(this->anchor().host()->includes_subposet(xfilter_index));
655 
656  // Body:
657 
658  define_old_variable(bool old_descending = this->_descending);
659  define_old_variable(bool old_strict = this->_strict);
660 
661  // Force iterator into a known clean state;
662  // also forces client to reset before using this.
663 
664  this->force_is_done();
665 
666  // Now reinitialize.
667 
668  this->initialize_filter(xfilter_index);
669 
670  // Postconditions:
671 
672  ensure(invariant());
673  ensure(this->is_initialized());
674  ensure(this->is_done());
675  ensure(this->filter().index() == xfilter_index);
676  ensure(this->descending() == old_descending);
677  ensure(this->strict() == old_strict);
678 
679  return;
680 }
681 
682 template <typename T>
683 void
685 put_filter(const scoped_index& xfilter_index)
686 {
687 
688  // Preconditions:
689 
690  require(this->is_initialized());
691  require(this->anchor().state_is_read_accessible());
692  require(this->anchor().host()->includes_subposet(xfilter_index));
693 
694  // Body:
695 
696  define_old_variable(bool old_descending = this->_descending);
697  define_old_variable(bool old_strict = this->_strict);
698 
699  // Force iterator into a known clean state;
700  // also forces client to reset before using this.
701 
702  this->force_is_done();
703 
704  // Now reinitialize.
705 
706  this->initialize_filter(xfilter_index.hub_pod());
707 
708  // Postconditions:
709 
710  ensure(invariant());
711  ensure(this->is_initialized());
712  ensure(this->is_done());
713  ensure(this->filter().index() ==~ xfilter_index);
714  ensure(this->descending() == old_descending);
715  ensure(this->strict() == old_strict);
716 
717  return;
718 }
719 
720 // PROTECTED MEMBER FUNCTIONS
721 
722 // PRIVATE MEMBER FUNCTIONS
723 
724 
725 // ===========================================================
726 // ANY FACET
727 // ===========================================================
728 
729 // PUBLIC MEMBER FUNCTIONS
730 
731 template <typename T>
732 bool
734 is_ancestor_of(const any* xother) const
735 {
736  bool result;
737 
738  // Preconditions:
739 
740  // Body:
741 
742  result = dynamic_cast<const filtered_depth_first_itr*>(xother) != 0;
743 
744  // Postconditions:
745 
746  // Exit
747 
748  return result;
749 }
750 
751 template <typename T>
754 clone() const
755 {
756  filtered_depth_first_itr* result;
757 
758  // Preconditions:
759 
760  // Body:
761 
762  result = new filtered_depth_first_itr;
763 
764  // Postconditions:
765 
766  ensure(result != 0);
767  ensure(!result->is_initialized());
768 
769  // Exit
770 
771  return result;
772 }
773 
774 template <typename T>
775 bool
777 invariant() const
778 {
779  bool result = true;
780 
781  // Preconditions:
782 
783  // Body:
784 
785  invariance(depth_first_itr<T>::invariant());
786 
787  if(this->invariant_check())
788  {
789  this->disable_invariant_check();
790 
792 
793  // Finished, turn invariant checking back on.
794 
795  this->enable_invariant_check();
796  }
797 
798  // Postconditions:
799 
800  // Exit
801 
802  return result;
803 }
804 
805 // PROTECTED MEMBER FUNCTIONS
806 
807 // PRIVATE MEMBER FUNCTIONS
808 
809 
810 } // namespace sheaf
811 
812 #endif // ifndef FILTERED_DEPTH_FIRST_ITR_IMPL_H
poset_state_handle * host() const
The poset which this is a handle to a component of.
std::string name() const
Definition: subposet.h:796
A client handle for a subposet.
Definition: subposet.h:86
virtual abstract_poset_member & anchor()
The poset member whose downset is being iterated over; the top member of the domain of iteration...
virtual void reset(bool xreset_markers=true)
Restarts the iteration over the down set of anchor().
void put_filter(const subposet &xfilter)
Sets the subposet which is the filter.
bool is_done() const
True if iteration finished.
order_type
The types of order in which the iterator will visit the members of the poset. Determines which action...
int version(bool xunalias=true) const
The (possibly aliased) version of this component. The version of the host used when evaluating proper...
void initialize_order(order_type xorder)
Initializes _order and _transition_fcn.
void initialize_filter()
Initializes the filter subposet from the client filter.
pod_index_type version_index() const
The subposet index for the filter associated with version().
bool state_is_read_accessible() const
True if this is attached and if the state is accessible for read or access control is disabled...
bool _descending
True if iterating over the up/down set of anchor.
order_type order() const
The order of the iteration. Determines which actions are exported to the client.
virtual bool includes_subposet(pod_index_type xsubposet_hub_id, bool xauto_access=true) const
True if this poset includes subposet with hub id xsubposet_hub_id.
bool invariant() const
The class invariant.
void put_descending(bool xdescending)
Set descending() to xdescending.
The general depth-first iterator over the intersection of a subposet filter with a directional (up or...
filtered_depth_first_itr & operator=(const filtered_depth_first_itr &xother)
Assignment operator.
abstract_poset_member * _anchor
The top member of the down set being iterated over.
const scoped_index & index() const
The index of the current member of the iteration.
Abstract base class with useful features for all objects.
Definition: any.h:39
virtual void force_is_done()
Force the iterator to be done.
bool visit_once() const
True if traversal should only visit a member once; that is, it should not revisit members it has alre...
The general depth-first iterator over the intersection of a poset member anchor&#39;s whole with its down...
void initialize_traversal(const abstract_poset_member &xanchor)
Initializes the anchor, has_visited markers and filter.
filtered_depth_first_itr()
Default constructor; creates an unattached iterator, with and all-pass filter.
An index within the external ("client") scope of a given id space.
Definition: scoped_index.h:116
bool strict() const
True if iterating over xstrict up/down set of anchor.
subposet & filter()
The subposet which is the filter; Defines what is passed, not what is blocked.
virtual bool anchor_is_ancestor_of(const abstract_poset_member &xmbr) const
True if xmbr conforms to the type of anchor of this.
bool _new_filter
True if this allocated a new filter;.
void disable_invariant_check() const
Disable invariant check. Intended for preventing recursive calls to invariant and for suppressing inv...
Definition: any.h:97
virtual bool is_ancestor_of(const any *other) const
True if other conforms to this.
virtual filtered_depth_first_itr * clone() const
Make a new instance of the same type as this.
virtual void put_anchor(const abstract_poset_member *xanchor)
Set anchor() to xanchor.
bool invariant_check() const
True if invariant checking is enabled.
Definition: any.h:79
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
Namespace for the sheaves component of the sheaf system.
void first()
Moves this to the first member of the iteration.
An abstract client handle for a member of a poset.
virtual bool is_initialized() const
True if this has been initialized for iteration with respect to a specific anchor.
bool descending() const
True if iterating over down set of anchor.
std::string version_name() const
The subposet name for the filter associated with version().
bool is_same_type(const any *other) const
True if other is the same type as this.
Definition: any.cc:79
void enable_invariant_check() const
Enable invariant checking.
Definition: any.h:87
void put_strict(bool xstrict)
Set strict() to xstrict.
bool _strict
True if iterating over the strict up/down set of anchor.
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
Definition: scoped_index.h:710