SheafSystem  0.0.0.0
i_connectivity_index_space_interval.cc
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 #include "SheafSystem/i_connectivity_index_space_interval.h"
22 
23 #include "SheafSystem/abstract_product_structure.h"
24 #include "SheafSystem/assert_contract.h"
25 #include "SheafSystem/i_connectivity_implicit_index_space_iterator.h"
26 #include "SheafSystem/forwarding_index_space_handle.h"
27 #include "SheafSystem/explicit_index_space_state.h"
28 #include "SheafSystem/hub_index_space_handle.h"
29 #include "SheafSystem/index_space_family.h"
30 
31 using namespace std;
32 using namespace fiber_bundle; // Workaround for MS C++ bug.
33 
34 // ===========================================================
35 // SPACE FACTORY FACET
36 // ===========================================================
37 
38 // PUBLIC MEMBER FUNCTIONS
39 
43  size_type xub,
44  pod_type xvertex_hub_begin)
45 {
46  // Preconditions:
47 
48  require(xub > 0);
49  require(xid_spaces.hub_id_space().contains(xvertex_hub_begin));
50 
51  // Body:
52 
53  define_old_variable(size_type old_id_spaces_end = xid_spaces.end());
54 
56  result_ptr->new_state(xid_spaces, xub);
57 
58  result_ptr->_vertex_hub_begin = xvertex_hub_begin;
59 
60  const i_connectivity_index_space_interval& result = *result_ptr;
61 
62  // Postconditions:
63 
64  ensure(&result.id_spaces() == &xid_spaces);
65  ensure(result.begin() == old_id_spaces_end);
66  ensure(result.end() == xid_spaces.end());
67  ensure(result.end() == result.begin() + xub);
68 
69  ensure(result.vertex_hub_begin() == xvertex_hub_begin);
70 
71  // Exit:
72 
73  return result;
74 }
75 
76 // PROTECTED MEMBER FUNCTIONS
77 
78 // PRIVATE MEMBER FUNCTIONS
79 
80 
81 // ===========================================================
82 // I_CONNECTIVITY_INDEX_SPACE_INTERVAL FACET
83 // ===========================================================
84 
85 // PUBLIC MEMBER FUNCTIONS
86 
89 {
90  // Preconditions:
91 
92  // Body:
93 
94  // Nothing to do.
95 
96  // Postconditions:
97 
98  // Exit:
99 
100  return;
101 }
102 
106 {
107  // Preconditions:
108 
109  // Body:
110 
111  // Postconditions:
112 
113  ensure(is_basic_query);
114 
115  // Exit:
116 
117  return _vertex_hub_begin;
118 }
119 
122 vertex_hub_begin(pod_type xlocal_id) const
123 {
124  // Preconditions:
125 
126  // Body:
127 
128  pod_type result = xlocal_id + _vertex_hub_begin;
129 
130  // Postconditions:
131 
132  ensure(is_basic_query);
133 
134  // Exit:
135 
136  return result;
137 }
138 
139 // PROTECTED MEMBER FUNCTIONS
140 
144 {
145  // Preconditions:
146 
147  // Body:
148 
149  // Postconditions:
150 
151  ensure(invariant());
152 
153  // Exit:
154 
155  return;
156 }
157 
158 // PRIVATE MEMBER FUNCTIONS
159 
160 
161 // ===========================================================
162 // INDEX_SPACE_INTERVAL FACET
163 // ===========================================================
164 
165 // PUBLIC MEMBER FUNCTIONS
166 
167 // PROTECTED MEMBER FUNCTIONS
168 
169 // PRIVATE MEMBER FUNCTIONS
170 
171 
172 // ===========================================================
173 // FACTORY FACET
174 // ===========================================================
175 
176 // PUBLIC MEMBER FUNCTIONS
177 
178 const std::string&
180 class_name() const
181 {
182  static const string result("i_connectivity_index_space_interval");
183  return result;
184 }
185 
188 clone() const
189 {
190  // Preconditions:
191 
192  // Body:
193 
196 
197  // Postconditions:
198 
199  ensure(result != 0);
200  ensure(is_same_type(result));
201 
202  // Exit:
203 
204  return result;
205 }
206 
207 // PROTECTED MEMBER FUNCTIONS
208 
209 // PRIVATE MEMBER FUNCTIONS
210 
211 bool
212 fiber_bundle::i_connectivity_index_space_interval::
213 make_prototype()
214 {
215  // Preconditions:
216 
217  // Body:
218 
220 
221  id_space_interval_factory().insert_prototype(lproto);
222 
223  // Postconditions:
224 
225  // Exit:
226 
227  return true;
228 }
229 
230 
231 // ===========================================================
232 // INDEX_SPACE_COLLECTION FACET
233 // ===========================================================
234 
235 // PUBLIC MEMBER FUNCTIONS
236 
237 bool
239 operator==(const index_space_collection& xother) const
240 {
241  // Preconditions:
242 
243  require(is_ancestor_of(&xother));
244 
245  // Body:
246 
248  dynamic_cast<const i_connectivity_index_space_interval&>(xother);
249 
250  bool result = index_space_interval::operator==(xother);
251 
252  result = result && (_vertex_hub_begin == lother._vertex_hub_begin);
253 
254  // Postconditions:
255 
256  // Exit
257 
258  return result;
259 }
260 
263 deep_size(bool xinclude_shallow) const
264 {
265  // Preconditions:
266 
267  // Body:
268 
269  size_type result = fiber_bundle::deep_size(*this, xinclude_shallow);
270 
271  // Postconditions:
272 
273  ensure(result >= 0);
274 
275  // Exit:
276 
277  return result;
278 }
279 
280 // PROTECTED MEMBER FUNCTIONS
281 
285 {
286  // Preconditions:
287 
288  require(is_ancestor_of(&xother));
289 
290  // Body:
291 
293  dynamic_cast<const i_connectivity_index_space_interval&>(xother);
294 
296 
298 
299  // Postconditions:
300 
301  ensure(invariant());
302  ensure((*this) == xother);
303 
304  // Exit:
305 
306  return *this;
307 }
308 
311 explicit_state(pod_type xlocal_id) const
312 {
313  // Preconditions:
314 
315  // Body:
316 
318 
319  explicit_index_space_state* result = 0;
320 
321  // Postconditions:
322 
323  ensure(is_basic_query);
324 
325  // Exit:
326 
327  return result;
328 }
329 
330 // PRIVATE MEMBER FUNCTIONS
331 
332 
333 // ===========================================================
334 // INDEX SPACE FACET
335 // ===========================================================
336 
337 // PUBLIC MEMBER FUNCTIONS
338 
339 void
341 remove(pod_type xlocal_id)
342 {
343  // Preconditions:
344 
345  // Body:
346 
348 
349  not_implemented();
350 
351  // Postconditions:
352 
353  ensure(!contains(xlocal_id));
354 
355  // Exit:
356 
357  return;
358 }
359 
362 ct(pod_type xlocal_id) const
363 {
364  // Preconditions:
365 
366  require(contains(xlocal_id));
367 
368  // Body:
369 
370  size_type result = 2;
371 
372  // Postconditions:
373 
374  ensure(is_basic_query);
375 
376  // Exit:
377 
378  return result;
379 }
380 
383 begin(pod_type xlocal_id) const
384 {
385  // Preconditions:
386 
387  require(contains(xlocal_id));
388 
389  // Body:
390 
391  pod_type result = 0;
392 
393  // Postconditions:
394 
395  ensure(is_basic_query);
396 
397  // Exit:
398 
399  return result;
400 }
401 
404 end(pod_type xlocal_id) const
405 {
406  // Preconditions:
407 
408  require(contains(xlocal_id));
409 
410  // Body:
411 
412  pod_type result = 2;
413 
414  // Postconditions:
415 
416  ensure(is_basic_query);
417 
418  // Exit:
419 
420  return result;
421 }
422 
423 bool
425 contains(pod_type xlocal_id, pod_type xid) const
426 {
427  // Preconditions:
428 
429  require(contains(xlocal_id));
430 
431  // Body:
432 
433  bool result = (0 <= xid) && (xid < 2);
434 
435  // Postconditions:
436 
437  ensure(is_basic_query);
438 
439  // Exit:
440 
441  return result;
442 }
443 
444 bool
447 {
448  // Preconditions:
449 
450  require(contains(xlocal_id));
451 
452  // Body:
453 
454  pod_type loffset = xid - vertex_hub_begin(xlocal_id);
455  bool result = result = ((0 <= loffset) && (loffset < 2));
456 
457  // Postconditions:
458 
459  ensure(is_basic_query);
460 
461  // Exit:
462 
463  return result;
464 }
465 
466 bool
468 contains(pod_type xlocal_id, pod_type xid, pod_type xhub_id) const
469 {
470  // Preconditions:
471 
472  require(contains(xlocal_id));
473 
474  // Body:
475 
476  bool result = is_valid(xhub_id) && (hub_pod(xlocal_id, xid) == xhub_id);
477 
478  // Postconditions:
479 
480  ensure(is_basic_query);
481 
482  // Exit:
483 
484  return result;
485 }
486 
489 pod(pod_type xlocal_id, pod_type xid) const
490 {
491  // Preconditions:
492 
493  require(contains(xlocal_id));
494 
495  // Body:
496 
497  pod_type result = xid - vertex_hub_begin(xlocal_id);
498 
499  if((result < 0) || (2 >= result))
500  {
501  // Not a valid pod.
502 
503  result = invalid_pod_index();
504  }
505 
506  // Postconditions:
507 
508  ensure(!is_valid(result) || contains(xlocal_id, result));
509 
510  // Exit:
511 
512  return result;
513 }
514 
517 unglued_hub_pod(pod_type xlocal_id, pod_type xid) const
518 {
519  // Preconditions:
520 
521  require(contains(xlocal_id));
522 
523  // Body:
524 
525  pod_type result =
526  ((0 <= xid) && (xid < 2)) ?
527  xid + vertex_hub_begin(xlocal_id) : invalid_pod_index();
528 
529  // Postconditions:
530 
531  ensure(!is_valid(result) || contains_unglued_hub(xlocal_id, result));
532 
533  // Exit:
534 
535  return result;
536 }
537 
538 bool
540 is_persistent(pod_type xlocal_id) const
541 {
542  // Preconditions:
543 
544  require(contains(xlocal_id));
545 
546  // Body:
547 
548  bool result = false;
549 
550  // Postconditions:
551 
552  ensure(is_basic_query);
553 
554  // Exit:
555 
556  return result;
557 }
558 
559 // PROTECTED MEMBER FUNCTIONS
560 
561 // PRIVATE MEMBER FUNCTIONS
562 
563 
564 // ===========================================================
565 // PRODUCT STRUCTURE FACET
566 // ===========================================================
567 
568 // PUBLIC MEMBER FUNCTIONS
569 
570 void
573  const abstract_product_structure& xproduct)
574 {
575  // Preconditions:
576 
577  require(contains(xlocal_id));
578 
579  // Body:
580 
582 
583  not_implemented();
584 
585  // Postconditions:
586 
587  ensure(has_product_structure(xlocal_id));
588 
589  // Exit:
590 
591  return;
592 }
593 
594 void
597 {
598  // Preconditions:
599 
600  require(contains(xlocal_id));
601 
602  // Body:
603 
605 
606  not_implemented();
607 
608  // Postconditions:
609 
610  ensure(!has_product_structure(xlocal_id));
611 
612  // Exit:
613 
614  return;
615 }
616 
619 product_structure(pod_type xlocal_id) const
620 {
621  // Preconditions:
622 
623  require(contains(xlocal_id));
624  require(has_product_structure(xlocal_id));
625 
626  // Body:
627 
629 
630  const abstract_product_structure* result = 0; // Just to silence compiler warnings.
631 
632  not_implemented();
633 
634  // Postconditions:
635 
636  ensure(is_basic_query);
637 
638  // Exit:
639 
640  return *result;
641 }
642 
645 product_structure(pod_type xlocal_id)
646 {
647  // Preconditions:
648 
649  require(contains(xlocal_id));
650  require(has_product_structure(xlocal_id));
651 
652  // Body:
653 
655 
656  abstract_product_structure* result = 0; // Just to silence compiler warnings.
657 
658  not_implemented();
659 
660  // Postconditions:
661 
662  ensure(is_basic_query);
663 
664  // Exit:
665 
666  return *result;
667 }
668 
669 bool
672 {
673  // Preconditions:
674 
675  require(contains(xlocal_id));
676 
677  // Body:
678 
680 
681  bool result = false; // Just to silence compiler warnings.
682 
683  not_implemented();
684 
685  // Postconditions:
686 
687  ensure(is_basic_query);
688 
689  // Exit:
690 
691  return result;
692 }
693 
694 // PROTECTED MEMBER FUNCTIONS
695 
696 // PRIVATE MEMBER FUNCTIONS
697 
698 
699 // ===========================================================
700 // HANDLE POOL FACET
701 // ===========================================================
702 
703 // PUBLIC MEMBER FUNCTIONS
704 
707 get_id_space(pod_type xlocal_id) const
708 {
709  // Preconditions:
710 
711  require(contains(xlocal_id));
712 
713  // Body:
714 
715  index_space_handle& result = _handles.get();
716  result.attach_to(*this, xlocal_id);
717 
718  // Postconditions:
719 
720  ensure(result.is_attached());
721 
722  // Exit:
723 
724  return result;
725 }
726 
727 void
730 {
731  // Preconditions:
732 
733  require(allocated_id_space(xid_space));
734 
735  // Body:
736 
737  // Detach the handle.
738 
739  xid_space.detach();
740 
741  // Release the handle to the pool.
742 
743  _handles.release(reinterpret_cast<forwarding_index_space_handle&>(xid_space));
744 
745  // Postconditions:
746 
747  ensure(is_basic_query);
748 
749  // Exit:
750 
751  return;
752 }
753 
754 bool
756 allocated_id_space(const index_space_handle& xid_space) const
757 {
758  // Preconditions:
759 
760  // Body:
761 
762  const forwarding_index_space_handle* lid_space =
763  dynamic_cast<const forwarding_index_space_handle*>(&xid_space);
764 
765  bool result = (lid_space != 0) && _handles.allocated(*lid_space);
766 
767  // Postconditions:
768 
769  ensure(is_basic_query);
770 
771  // Exit:
772 
773  return result;
774 }
775 
776 // PROTECTED MEMBER FUNCTIONS
777 
778 // PRIVATE MEMBER FUNCTIONS
779 
780 
781 // ===========================================================
782 // ITERATOR POOL FACET
783 // ===========================================================
784 
785 // PUBLIC MEMBER FUNCTIONS
786 
790 {
791  // Preconditions:
792 
793  require(contains(xlocal_id));
794 
795  // Body:
796 
797  index_space_iterator& result = _iterators.get();
798  result.attach_to(*this, xlocal_id);
799 
800  // Postconditions:
801 
802  ensure(result.is_attached());
803 
804  // Exit:
805 
806  return result;
807 }
808 
809 void
812 {
813  // Preconditions:
814 
815  require(allocated_id_space_iterator(xitr));
816 
817  // Body:
818 
819  // Detach the iterator.
820 
821  xitr.detach();
822 
823  // Release the iterator to the pool.
824 
825  _iterators.release(reinterpret_cast<i_connectivity_implicit_index_space_iterator&>(xitr));
826 
827  // Postconditions:
828 
829  ensure(is_basic_query);
830 
831  // Exit:
832 
833  return;
834 }
835 
836 bool
839 {
840  // Preconditions:
841 
842  // Body:
843 
845  dynamic_cast<const i_connectivity_implicit_index_space_iterator*>(&xitr);
846 
847  bool result = (litr != 0) && _iterators.allocated(*litr);
848 
849  // Postconditions:
850 
851  ensure(is_basic_query);
852 
853  // Exit:
854 
855  return result;
856 }
857 
858 // PROTECTED MEMBER FUNCTIONS
859 
860 // PRIVATE MEMBER FUNCTIONS
861 
862 
863 // ===========================================================
864 // ANY FACET
865 // ===========================================================
866 
867 // PUBLIC MEMBER FUNCTIONS
868 
869 bool
871 is_ancestor_of(const any *other) const
872 {
873  // Preconditions:
874 
875  require(other != 0);
876 
877  // Body:
878 
879  // True if other conforms to this
880 
881  bool result = dynamic_cast<const i_connectivity_index_space_interval*>(other) != 0;
882 
883  // Postconditions:
884 
885  // Exit:
886 
887  return result;
888 }
889 
890 bool
892 invariant() const
893 {
894  bool result = true;
895 
896  if(invariant_check())
897  {
898  // Prevent recursive calls to invariant
899 
901 
902  // Must satisfy base class invariant
903 
904  invariance(index_space_interval::invariant());
905 
906  // Invariances for this class:
907 
908  // Finished, turn invariant checking back on.
909 
911  }
912 
913  // Exit
914 
915  return result;
916 }
917 
918 // PROTECTED MEMBER FUNCTIONS
919 
920 // PRIVATE MEMBER FUNCTIONS
921 
922 
923 // ===========================================================
924 // NON-MEMBER FUNCTIONS
925 // ===========================================================
926 
927 size_t
928 fiber_bundle::
929 deep_size(const i_connectivity_index_space_interval& xn, bool xinclude_shallow)
930 {
931  // Preconditions:
932 
933  // Body:
934 
935  size_t result = xinclude_shallow ? sizeof(xn) : 0;
936 
937  // Add contributions for _handles.
938 
939  result += deep_size(xn._handles, false);
940 
941  // Add contributions for _iterators.
942 
943  result += deep_size(xn._iterators, false);
944 
945  // Postconditions:
946 
947  ensure(result >= 0);
948 
949  // Exit
950 
951  return result;
952 }
virtual bool allocated_id_space(const index_space_handle &xid_space) const
True if and only if id space handle xid_space was allocated by the handle pool.
virtual void delete_product_structure(pod_type xlocal_id)
Deletes the product structure for the id space with id xlocal_id.
static const i_connectivity_index_space_interval & new_space(index_space_family &xid_spaces, size_type xub, pod_type xvertex_hub_begin)
Create a new interval of id spaces for 1D structured block connectivity in the id space family xid_sp...
virtual pod_type unglued_hub_pod(pod_type xlocal_id, pod_type xid) const
The pod index in the unglued_hub id space equivalent to xid in the id space with id xlocal_id...
pod_type end() const
The ending index of the id spaces.
An abstract class that defines the product structure for an id space.
virtual const index_space_family & id_spaces() const
The id space family for this (const version).
An abstract iterator over the ids of an id space.
virtual const std::string & class_name() const
The name of this class.
virtual i_connectivity_index_space_interval * clone() const
Virtual constructor; create a new instance of the same type at this.
virtual index_space_interval & operator=(const index_space_collection &xother)
Assignment operator.
list_pool< forwarding_index_space_handle > _handles
The handle pool.
virtual bool invariant() const
Class invariant.
virtual const abstract_product_structure & product_structure(pod_type xlocal_id) const
The product structure for the id space with id xlocal_id (const version).
virtual void new_product_structure(pod_type xlocal_id, const abstract_product_structure &xproduct)
Creates a new product structure for the id space with id xlocal_id by cloning the product structure...
STL namespace.
virtual void detach()=0
Detach this handle form its state, if any.
An abstract handle to a space of alternate integer identifiers (aliases) for a subset of a hub set of...
virtual bool operator==(const index_space_collection &xother) const
True if this is equivalent to xother.
pod_index_type pod_type
The "plain old data" index type for this.
virtual pod_type begin(pod_type xlocal_id) const
Beginning id of this space with id xlocal_id.
virtual bool is_attached() const =0
True if this handle is attached to a state.
virtual void detach()=0
Detach this handle form its state, if any.
virtual explicit_index_space_state * explicit_state(pod_type xlocal_id) const
The explicit id space state for id xlocal_id. Returns null if there is no explicit id space for xloca...
virtual void release_id_space(index_space_handle &xid_space) const
Returns the id space handle xid_space to the handle pool.
An implementation of index_space_interval for an interval of implicit id spaces for the connectivity ...
pod_type _vertex_hub_begin
The hub id of the beginning of the vertex id space.
Abstract base class with useful features for all objects.
Definition: any.h:39
An implemenation of index_space_collection that adds an interface for the interval [begin()...
virtual void release_id_space_iterator(index_space_iterator &xitr) const
Returns the id space iterator xitr to the iterator pool.
An immutable abstract state for a space of alternate integer identifiers (aliases) for a subset of th...
virtual size_type ct(pod_type xlocal_id) const
The number of members for the id space with id xlocal_id.
An implementation of class index_space_handle for an forwarding_index_space_state.
void attach_to(const index_space_family &xid_spaces, pod_type xindex)
Attach to the state with index xindex in the id space family xid_spaces.
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
virtual void remove(pod_type xlocal_id)
Remove the id space with id xlocal_id.
virtual bool contains(pod_type xlocal_id, pod_type xid) const
True if the space with id xlocal_id contains id xid.
pod_type vertex_hub_begin() const
The hub id of the beginning of the vertex id space.
virtual bool allocated_id_space_iterator(const index_space_iterator &xitr) const
True if and only if id space iterator xitr was allocated by the iterator pool.
A collection of id space states. This is a virtual class with provides an interface for accessing the...
void disable_invariant_check() const
Disable invariant check. Intended for preventing recursive calls to invariant and for suppressing inv...
Definition: any.h:97
void attach_to(const index_space_family &xid_spaces, pod_type xindex)
Attach to the state with index xindex in the id space family xid_spaces.
static factory< index_space_interval > & id_space_interval_factory()
A factory for making descendants of this class.
virtual pod_type pod(pod_type xlocal_id, pod_type xid) const
The pod index in the space with id xlocal_id equivalent to xid in the hub id space.
An implementation of implicit_index_space_iterator for an implicit id space in an i_connectivity_inde...
SHEAF_DLL_SPEC size_t deep_size(const sec_vd &x0, bool xinclude_shallow=true)
The deep size of the referenced object of type sec_vd. if xinclude_shallow, add the sizeof x0 to the ...
Definition: sec_vd.cc:1448
virtual index_space_handle & get_id_space(pod_type xlocal_id) const
Allocates an id space handle from the handle pool attached to state with id xlocal_id.
virtual bool operator==(const index_space_collection &xother) const
True if this is equivalent to xother.
virtual pod_type end(pod_type xlocal_id) const
Ending id of this space with id xlocal_id.
virtual bool is_attached() const =0
True if this iterator is attached to a state.
bool invariant_check() const
True if invariant checking is enabled.
Definition: any.h:79
virtual index_space_iterator & get_id_space_iterator(pod_type xlocal_id) const
Allocates an id space iterator from the iterator pool attached to state with id xlocal_id.
pod_type end() const
Ending space id of this interval in the id space family scope.
friend SHEAF_DLL_SPEC size_t deep_size(const i_connectivity_index_space_interval &xn, bool xinclude_shallow)
The deep size of i_connectivity_index_space_interval& xn.
virtual bool has_product_structure(pod_type xlocal_id) const
True if the id space with id xlocal_id has a product structure.
Factory and container for a family of id spaces.
pod_type hub_pod(pod_type xlocal_id, pod_type xid) const
The pod index in the glued hub id space equivalent to xid in the id space with id xlocal_id...
list_pool< i_connectivity_implicit_index_space_iterator > _iterators
The iterator pool.
virtual bool is_persistent(pod_type xlocal_id) const
True if the id space with id xlocal_id should be written to disk.
virtual bool contains_unglued_hub(pod_type xlocal_id, pod_type xid) const
True if the space with id xlocal_id contains an id equivalent to xid in the unglued hub id space...
virtual i_connectivity_index_space_interval & operator=(const index_space_collection &xother)
Assignment operator.
SHEAF_DLL_SPEC bool is_valid(pod_index_type xpod_index)
True if an only if xpod_index is valid.
Definition: pod_types.cc:37
Namespace for the fiber_bundles component of the sheaf system.
pod_type begin() const
Beginning space id of this interval in the id space family scope.
SHEAF_DLL_SPEC pod_index_type invalid_pod_index()
The invalid pod index value.
Definition: pod_types.cc:31
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
const hub_index_space_handle & hub_id_space() const
The hub id space of this family.
virtual bool is_ancestor_of(const any *other) const
Conformance test; true if other conforms to this.
virtual bool contains(pod_type xid) const
True if this space contains id xid.