SheafSystem  0.0.0.0
explicit_index_space_handle.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/abstract_product_structure.h"
22 #include "SheafSystem/explicit_index_space_handle.h"
23 #include "SheafSystem/assert_contract.h"
24 #include "SheafSystem/explicit_index_space_state.h"
25 #include "SheafSystem/hub_index_space_handle.h"
26 #include "SheafSystem/index_space_family.h"
27 #include "SheafSystem/index_space_iterator.h"
28 
29 // ===========================================================
30 // EXPLICIT_INDEX_SPACE_HANDLE FACET
31 // ===========================================================
32 
33 // PUBLIC MEMBER FUNCTIONS
34 
37  : _state(0)
38 {
39  // Preconditions:
40 
41  // Body:
42 
43  // Postconditions:
44 
45  ensure(invariant());
46 
47  // Exit:
48 
49  return;
50 }
51 
54  : _state(0)
55 {
56  // Preconditions:
57 
58  // Body:
59 
60  (*this) = xother;
61 
62  // Postconditions:
63 
64  ensure(invariant());
65  ensure((*this) == xother);
66 
67  // Exit:
68 
69  return;
70 }
71 
74  pod_type xindex)
75 {
76  // Preconditions:
77 
78  require(conforms_to_state(xid_spaces, xindex));
79 
80  // Body:
81 
82  attach_to(xid_spaces, xindex);
83 
84  // Postconditions:
85 
86  ensure(invariant());
87  ensure(is_attached());
88  ensure(&id_spaces() == &xid_spaces);
89  ensure(index() == xindex);
90 
91  // Exit:
92 
93  return;
94 }
95 
98  const std::string& xname)
99 {
100  // Preconditions:
101 
102  require(conforms_to_state(xid_spaces, xname));
103 
104  // Body:
105 
106  attach_to(xid_spaces, xname);
107 
108  // Postconditions:
109 
110  ensure(invariant());
111  ensure(is_attached());
112  ensure(&id_spaces() == &xid_spaces);
113  ensure(name() == xname);
114 
115  // Exit:
116 
117  return;
118 }
119 
122 {
123  // Preconditions:
124 
125  // Body:
126 
127  // nothing to do.
128 
129  // Postconditions:
130 
131  // Exit:
132 
133  return;
134 }
135 
139 {
140  // Preconditions:
141 
142  require(xother.is_attached() ? conforms_to_state(xother) : true);
143 
144  // Body:
145 
146  attach_to(xother);
147 
148  // Postconditions:
149 
150  ensure(invariant());
151  ensure((*this) == xother);
152 
153  // Exit:
154 
155  return *this;
156 }
157 
158 // PROTECTED MEMBER FUNCTIONS
159 
163 {
164  // Preconditions:
165 
166  require(is_attached());
167 
168  // Body:
169 
171 
172  // Postconditions:
173 
174  ensure(is_basic_query);
175 
176  // Exit:
177 
178  return result;
179 }
180 
183 state() const
184 {
185  // Preconditions:
186 
187  require(is_attached());
188 
189  // Body:
190 
191  const explicit_index_space_state& result = *_state;
192 
193  // Postconditions:
194 
195  ensure(is_basic_query);
196 
197  // Exit:
198 
199  return result;
200 }
201 
202 // PRIVATE MEMBER FUNCTIONS
203 
204 
205 // ===========================================================
206 // INDEX_SPACE_HANDLE FACET
207 // ===========================================================
208 
209 // PUBLIC MEMBER FUNCTIONS
210 
214 {
215  // Preconditions:
216 
217  require(xother.is_attached() ? conforms_to_state(xother) : true);
218 
219  // Body:
220 
221  attach_to(xother);
222 
223  // Postconditions:
224 
225  ensure(invariant());
226  ensure((*this) == xother);
227 
228  // Exit:
229 
230  return *this;
231 }
232 
235 clone() const
236 {
238 
239  // Preconditions:
240 
241  // Body:
242 
243  result = new explicit_index_space_handle(*this);
244 
245  // Postconditions:
246 
247  ensure(result != 0);
248  ensure(is_same_type(result));
249  ensure(*result == *this);
250 
251  // Exit:
252 
253  return result;
254 }
255 
256 // PROTECTED MEMBER FUNCTIONS
257 
258 // PRIVATE MEMBER FUNCTIONS
259 
260 
261 // ===========================================================
262 // INDEX SPACE FACET
263 // ===========================================================
264 
265 // PUBLIC MEMBER FUNCTIONS
266 
269 id_spaces() const
270 {
271  // Preconditions:
272 
273  require(is_attached());
274 
275  // Body:
276 
277  const index_space_family& result = _state->id_spaces();
278 
279  // Postconditions:
280 
281  ensure(is_basic_query);
282 
283  // Exit:
284 
285  return result;
286 }
287 
291 {
292  // Preconditions:
293 
294  require(is_attached());
295 
296  // Body:
297 
298  index_space_family& result = _state->id_spaces();
299 
300  // Postconditions:
301 
302  ensure(is_basic_query);
303 
304  // Exit:
305 
306  return result;
307 }
308 
311 ct() const
312 {
313  // Preconditions:
314 
315  require(is_attached());
316 
317  // Body:
318 
319  size_type result = _state->ct();
320 
321  // Postconditions:
322 
323  ensure(is_basic_query);
324 
325  // Exit:
326 
327  return result;
328 }
329 
332 begin() const
333 {
334  // Preconditions:
335 
336  require(is_attached());
337 
338  // Body:
339 
340  pod_type result = _state->begin();
341 
342  // Postconditions:
343 
344  ensure(is_basic_query);
345 
346  // Exit:
347 
348  return result;
349 }
350 
353 end() const
354 {
355  // Preconditions:
356 
357  require(is_attached());
358 
359  // Body:
360 
361  pod_type result = _state->end();
362 
363  // Postconditions:
364 
365  ensure(is_basic_query);
366 
367  // Exit:
368 
369  return result;
370 }
371 
372 bool
374 contains(pod_type xid) const
375 {
376  // Preconditions:
377 
378  require(is_attached());
379 
380  // Body:
381 
382  bool result = _state->contains(xid);
383 
384  // Postconditions:
385 
386  ensure(is_basic_query);
387 
388  // Exit:
389 
390  return result;
391 }
392 
393 bool
396 {
397  // Preconditions:
398 
399  require(is_attached());
400 
401  // Body:
402 
403  bool result = _state->contains_unglued_hub(xid);
404 
405  // Postconditions:
406 
407  ensure(is_basic_query);
408 
409  // Exit:
410 
411  return result;
412 }
413 
414 bool
417 {
418  // Preconditions:
419 
420  require(is_attached());
421 
422  // Body:
423 
424  bool result = _state->contains_glued_hub(xid);
425 
426  // Postconditions:
427 
428  ensure(is_basic_query);
429 
430  // Exit:
431 
432  return result;
433 }
434 
435 bool
437 contains(pod_type xid, pod_type xhub_id) const
438 {
439  // Preconditions:
440 
441  require(is_attached());
442 
443  // Body:
444 
445  bool result = _state->contains(xid, xhub_id);
446 
447  // Postconditions:
448 
449  ensure(is_basic_query);
450 
451  // Exit:
452 
453  return result;
454 }
455 
458 pod(pod_type xid) const
459 {
460  // Preconditions:
461 
462  require(is_attached());
463 
464  // Body:
465 
466  pod_type result = _state->pod(xid);
467 
468  // Postconditions:
469 
470  ensure(!is_valid(result) || contains(result));
471 
472  // Exit:
473 
474  return result;
475 }
476 
480 {
481  // Preconditions:
482 
483  require(is_attached());
484 
485  // Body:
486 
487  pod_type result = _state->unglued_hub_pod(xid);
488 
489  // Postconditions:
490 
491  ensure(!is_valid(result) || contains_unglued_hub(result));
492 
493  // Exit:
494 
495  return result;
496 }
497 
501 {
502  // Preconditions:
503 
504  require(is_attached());
505 
506  // Body:
507 
508  pod_type result = _state->glued_hub_pod(xid);
509 
510  // Postconditions:
511 
512  ensure(!is_valid(result) || contains_unglued_hub(result));
513 
514  // Exit:
515 
516  return result;
517 }
518 
519 bool
522 {
523  // Preconditions:
524 
525  require(is_attached());
526 
527  // Body:
528 
529  bool result = _state->is_persistent();
530 
531  // Postconditions:
532 
533  ensure(is_basic_query);
534 
535  // Exit:
536 
537  return result;
538 }
539 
540 // PROTECTED MEMBER FUNCTIONS
541 
542 // PRIVATE MEMBER FUNCTIONS
543 
544 
545 // ===========================================================
546 // HANDLE FACET
547 // ===========================================================
548 
549 // PUBLIC MEMBER FUNCTIONS
550 
553 host() const
554 {
555  // Preconditions:
556 
557  require(is_attached());
558 
559  // Body:
560 
561  const index_space_collection& result = _state->host();
562 
563  // Postconditions:
564 
565  ensure(is_basic_query);
566 
567  // Exit:
568 
569  return result;
570 }
571 
574 index() const
575 {
576  // Preconditions:
577 
578  require(is_attached());
579 
580  // Body:
581 
582  pod_type result = _state->index();
583 
584  // Postconditions:
585 
586  ensure(id_spaces().contains(result));
587 
588  // Exit:
589 
590  return result;
591 }
592 
593 bool
595 is_attached() const
596 {
597  // Preconditions:
598 
599  // Body:
600 
601  bool result = (_state != 0);
602 
603  // Postconditions:
604 
605  ensure(is_basic_query);
606 
607  // Exit:
608 
609  return result;
610 }
611 
612 void
615 {
616  // Preconditions:
617 
618  require(is_attached());
619  require(id_spaces().contains(xindex));
620  require(conforms_to_state(xindex));
621 
622  // Body:
623 
624  define_old_variable(const index_space_family& old_id_spaces = id_spaces());
625 
626  _state = state(xindex);
627 
628  // Postconditions:
629 
630  ensure(is_attached());
631  ensure(&id_spaces() == &old_id_spaces);
632  ensure(index() == xindex);
633 
634  // Exit:
635 
636  return;
637 }
638 
639 void
641 attach_to(const index_space_collection& xhost, pod_type xlocal_id)
642 {
643  // Preconditions:
644 
645  require(xhost.contains(xlocal_id));
646  require(conforms_to_state(xhost, xlocal_id));
647 
648  // Body:
649 
650  _state = state(xhost, xlocal_id);
651 
652  // Postconditions:
653 
654  ensure(is_attached());
655  ensure(&host() == &xhost);
656  ensure(index() == xhost.family_scope(xlocal_id));
657 
658  // Exit:
659 
660  return;
661 }
662 
663 void
666 {
667  // Preconditions:
668 
669  // Body:
670 
671  _state = 0;
672 
673  // Postconditions:
674 
675  ensure(!is_attached());
676 
677  // Exit:
678 
679  return;
680 }
681 
682 bool
685  pod_type xlocal_id) const
686 {
687  // Preconditions:
688 
689  require(xhost.contains(xlocal_id));
690 
691  // Body:
692 
693  bool result = (state(xhost, xlocal_id) != 0);
694 
695  // Postconditions:
696 
697  ensure(is_basic_query);
698 
699  // Exit:
700 
701  return result;
702 }
703 
704 // PROTECTED MEMBER FUNCTIONS
705 
706 void
709 {
710  // Preconditions:
711 
712  require(xstate != 0);
713  require(conforms_to_state(xstate));
714 
715  // Body:
716 
717  _state = xstate;
718 
719  // Postconditions:
720 
721  ensure(is_attached());
722  ensure(&state() == xstate);
723 
724  // Exit:
725 
726  return;
727 }
728 
729 bool
732 {
733  // Preconditions:
734 
735  // Body:
736 
737  bool result = (xstate != 0);
738 
739  // Postconditions:
740 
741  ensure(is_basic_query);
742 
743  // Exit:
744 
745  return result;
746 }
747 
750 state(pod_type xindex) const
751 {
752  // Preconditions:
753 
754  require(is_attached());
755  require(id_spaces().contains(xindex));
756 
757  // Body:
758 
759  const index_space_collection& lhost =
760  host().contains(xindex) ? host() : *id_spaces().collection(xindex);
761 
763  lhost.explicit_state(lhost.local_scope(xindex));
764 
765  // Postconditions:
766 
767  ensure(is_basic_query);
768 
769  // Exit:
770 
771  return result;
772 }
773 
776 state(const index_space_collection& xhost, pod_type xlocal_id) const
777 {
778  // Preconditions:
779 
780  require(xhost.contains(xlocal_id));
781 
782  // Body:
783 
784  explicit_index_space_state* result = xhost.explicit_state(xlocal_id);
785 
786  // Postconditions:
787 
788  ensure(is_basic_query);
789 
790  // Exit:
791 
792  return result;
793 }
794 
795 // PRIVATE MEMBER FUNCTIONS
796 
797 
798 // ===========================================================
799 // PRODUCT STRUCTURE FACET
800 // ===========================================================
801 
802 // PUBLIC MEMBER FUNCTIONS
803 
804 void
807 {
808  // Preconditions:
809 
810  require(is_attached());
811 
812  // Body:
813 
814  _state->new_product_structure(xproduct);
815 
816  // Postconditions:
817 
818  ensure(has_product_structure());
819 
820  // Exit:
821 
822  return;
823 }
824 
825 void
828 {
829  // Preconditions:
830 
831  require(is_attached());
832 
833  // Body:
834 
836 
837  // Postconditions:
838 
839  ensure(!has_product_structure());
840 
841  // Exit:
842 
843  return;
844 }
845 
849 {
850  // Preconditions:
851 
852  require(is_attached());
853  require(has_product_structure());
854 
855  // Body:
856 
858 
859  // Postconditions:
860 
861  ensure(is_basic_query);
862 
863  // Exit:
864 
865  return result;
866 }
867 
871 {
872  // Preconditions:
873 
874  require(is_attached());
875  require(has_product_structure());
876 
877  // Body:
878 
880 
881  // Postconditions:
882 
883  ensure(is_basic_query);
884 
885  // Exit:
886 
887  return result;
888 }
889 
890 bool
893 {
894  // Preconditions:
895 
896  require(is_attached());
897 
898  // Body:
899 
900  bool result = _state->has_product_structure();
901 
902  // Postconditions:
903 
904  ensure(is_basic_query);
905 
906  // Exit:
907 
908  return result;
909 }
910 
911 // PROTECTED MEMBER FUNCTIONS
912 
913 // PRIVATE MEMBER FUNCTIONS
914 
915 
916 // ===========================================================
917 // HANDLE POOL FACET
918 // ===========================================================
919 
920 // PUBLIC MEMBER FUNCTIONS
921 
925 {
926  // Preconditions:
927 
928  require(is_attached());
929 
930  // Body:
931 
933 
934  // Postconditions:
935 
936  ensure(result.is_attached());
937 
938  // Exit:
939 
940  return result;
941 }
942 
943 void
946 {
947  // Preconditions:
948 
949  require(is_attached());
950  require(allocated_id_space());
951 
952  // Body:
953 
954  _state->release_id_space(const_cast<explicit_index_space_handle&>(*this));
955 
956  // Postconditions:
957 
958  ensure(is_basic_query);
959 
960  // Exit:
961 
962  return;
963 }
964 
965 bool
968 {
969  // Preconditions:
970 
971  require(is_attached());
972 
973  // Body:
974 
975  bool result = _state->allocated_id_space(*this);
976 
977  // Postconditions:
978 
979  ensure(is_basic_query);
980 
981  // Exit:
982 
983  return result;
984 }
985 
986 // PROTECTED MEMBER FUNCTIONS
987 
988 // PRIVATE MEMBER FUNCTIONS
989 
990 
991 // ===========================================================
992 // ITERATOR POOL FACET
993 // ===========================================================
994 
995 // PUBLIC MEMBER FUNCTIONS
996 
1000 {
1001  // Preconditions:
1002 
1003  require(is_attached());
1004 
1005  // Body:
1006 
1008 
1009  // Postconditions:
1010 
1011  ensure(result.is_attached());
1012 
1013  // Exit:
1014 
1015  return result;
1016 }
1017 
1018 void
1021 {
1022  // Preconditions:
1023 
1024  require(is_attached());
1025  require(allocated_iterator(xitr));
1026 
1027  // Body:
1028 
1029  _state->release_iterator(xitr);
1030 
1031  // Postconditions:
1032 
1033  ensure(is_basic_query);
1034 
1035  // Exit:
1036 
1037  return;
1038 }
1039 
1040 bool
1043 {
1044  // Preconditions:
1045 
1046  require(is_attached());
1047 
1048  // Body:
1049 
1050  bool result = _state->allocated_iterator(xitr);
1051 
1052  // Postconditions:
1053 
1054  ensure(is_basic_query);
1055 
1056  // Exit:
1057 
1058  return result;
1059 }
1060 
1061 // PROTECTED MEMBER FUNCTIONS
1062 
1063 // PRIVATE MEMBER FUNCTIONS
1064 
1065 
1066 // ===========================================================
1067 // ANY FACET
1068 // ===========================================================
1069 
1070 // PUBLIC MEMBER FUNCTIONS
1071 
1072 bool
1074 is_ancestor_of(const any *other) const
1075 {
1076  // Preconditions:
1077 
1078  require(other != 0);
1079 
1080  // Body:
1081 
1082  // True if other conforms to this
1083 
1084  bool result = dynamic_cast<const explicit_index_space_handle*>(other) != 0;
1085 
1086  // Postconditions:
1087 
1088  // Exit:
1089 
1090  return result;
1091 }
1092 
1093 bool
1095 invariant() const
1096 {
1097  bool result = true;
1098 
1099  if(invariant_check())
1100  {
1101  // Prevent recursive calls to invariant
1102 
1104 
1105  // Must satisfy base class invariant
1106 
1107  invariance(index_space_handle::invariant());
1108 
1109  // Invariances for this class:
1110 
1111  // Finished, turn invariant checking back on.
1112 
1114  }
1115 
1116  // Exit
1117 
1118  return result;
1119 }
1120 
1121 // PROTECTED MEMBER FUNCTIONS
1122 
1123 // PRIVATE MEMBER FUNCTIONS
1124 
1125 
1126 // ===========================================================
1127 // NON-MEMBER FUNCTIONS
1128 // ===========================================================
1129 
1130 
1131 
virtual pod_type glued_hub_pod(pod_type xid) const
The pod index in the hub id space equivalent to xid in this id space. synonym for unglued_hub_pod(xid...
virtual void release_id_space(index_space_handle &xid_space) const =0
Returns the id space handle xid_space to the handle pool.
virtual bool allocated_iterator(const index_space_iterator &xitr) const =0
True if and only if id space iterator xitr was allocated by the iterator pool.
const index_space_collection * collection(pod_type xid) const
Id space collection for id xid (const version).
virtual bool contains_glued_hub(pod_type xid) const
True if this space contains an id equivalent to xid in the glued hub id space.
bool is_persistent() const
True if this id space should be written to disk.
virtual index_space_handle & get_id_space() const =0
Allocates an id space handle from the handle pool.
const index_space_collection & host() const
The host collection (const version).
size_type ct() const
The number of members.
virtual void attach_to(pod_type xindex)
Attach to the state with index xindex in the id space family id_spaces().
virtual pod_type index() const
Index of this space.
An abstract class that defines the product structure for an id space.
An abstract iterator over the ids of an id space.
virtual pod_type unglued_hub_pod(pod_type xid) const =0
The pod index in the unglued hub id space equivalent to xid in this id space.
pod_type end() const
Ending id of this space.
virtual explicit_index_space_handle * clone() const
Virtual constructor, makes a new instance of the same type as this. If the handle is attached...
virtual pod_type family_scope(pod_type xlocal_id) const =0
Id relative to the id space family equivalent to the local id xlocal_id.
virtual bool is_persistent() const
True if this id space should be written to disk.
explicit_index_space_handle & operator=(const explicit_index_space_handle &xother)
Assignment operator; attach this handle to the state of xother. synonym for attach_to(xother).
virtual void release_iterator(index_space_iterator &xitr) const =0
Returns the id space iterator xitr to the iterator pool.
const abstract_product_structure & product_structure() const
The product structure for this id space (const version).
An abstract handle to a space of alternate integer identifiers (aliases) for a subset of a hub set of...
virtual const index_space_family & id_spaces() const
The id space family for this (const version).
virtual void release_id_space() const
Returns this id space handle to the handle pool.
const index_space_family & id_spaces() const
The id space family for this (const version).
bool has_product_structure() const
True if this id space has a product structure.
virtual bool is_attached() const =0
True if this handle is attached to a state.
virtual index_space_iterator & get_iterator() const
Allocates an id space iterator from the iterator pool.
virtual explicit_index_space_state * explicit_state(pod_type xlocal_id) const =0
The explicit id space state for id xlocal_id. Returns null if there is no explicit id space for xloca...
virtual pod_type pod(pod_type xid) const
The pod index in this space equivalent to xid in the hub id space.
virtual pod_type local_scope(pod_type xspace_id) const =0
Id relative to this collection equivalent to the id space family id xspace_id.
explicit_index_space_state & state()
The explicit state (mutable version).
virtual bool contains_glued_hub(pod_type xid) const
True if this space contains an id equivalent to xid in the hub id space.
virtual void new_product_structure(const abstract_product_structure &xproduct)
Creates a new product structure for this id space by cloning the product structure, xproduct.
Abstract base class with useful features for all objects.
Definition: any.h:39
virtual pod_type pod(pod_type xid) const =0
The pod index in this space equivalent to xid in the unglued hub id space.
An immutable abstract state for a space of alternate integer identifiers (aliases) for a subset of th...
An implementation of class index_space_handle for an explicit_index_space_state.
virtual bool allocated_id_space() const
True if and only if this id space handle was allocated by the handle pool.
virtual index_space_handle & get_id_space() const
Allocates an id space handle from the handle pool.
std::string name() const
Name of this space.
pod_index_type pod_type
The "plain old data" index type for this.
pod_type begin() const
Beginning id of this space.
virtual bool is_attached() const
True if this handle is attached to a state.
virtual void delete_product_structure()
Deletes the product structure for this id space.
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
virtual bool invariant() const
Class invariant.
virtual bool contains_unglued_hub(pod_type xid) const
True if this space contains an id equivalent to xid in the unglued hub id space.
virtual bool contains_unglued_hub(pod_type xid) const =0
True if this space contains an id equivalent to xid in the unglued hub id space.
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
virtual bool contains(pod_type xlocal_id) const =0
True if this collection contains the id space with local id xlocal_id.
virtual index_space_iterator & get_iterator() const =0
Allocates an id space iterator from the iterator pool.
virtual bool is_ancestor_of(const any *other) const
Conformance test; true if other conforms to this.
virtual void detach()
Detach this handle form its state, if any.
virtual const abstract_product_structure & product_structure() const
The product structure for this id space (const version).
virtual pod_type unglued_hub_pod(pod_type xid) const
The pod index in the unglued hub id space equivalent to xid in this id space.
virtual bool allocated_iterator(const index_space_iterator &xitr) const
True if and only if id space iterator xitr was allocated by the iterator pool.
virtual void delete_product_structure()
Deletes the product structure for this id space.
virtual void new_product_structure(const abstract_product_structure &xproduct)
Creates a new product structure for this id space by cloning the product structure, xproduct.
virtual pod_type begin() const
Beginning id of this space.
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 bool contains(pod_type xid) const =0
True if this space contains id xid.
virtual bool allocated_id_space(const index_space_handle &xid_space) const =0
True if and only if id space handle xid_space was allocated by the handle pool.
pod_type index() const
The index of this id space.
virtual bool conforms_to_state(const index_space_collection &xhost, pod_type xlocal_id) const
True if this conforms to the handle type required by the state with local scope id xlocal_id in the h...
virtual pod_type glued_hub_pod(pod_type xid) const
The pod index in the glued hub id space equivalent to xid in this id space.
virtual pod_type end() const
Ending id of this space.
virtual bool has_product_structure() const
True if this id space has a product structure.
virtual const index_space_collection & host() const
The host collection.
virtual size_type ct() const
The number of members.
virtual void release_iterator(index_space_iterator &xitr) const
Returns the id space iterator xitr to the iterator pool.
virtual bool invariant() const
Class invariant.
Factory and container for a family of id spaces.
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
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
virtual bool contains(pod_type xid) const
True if this space contains id xid.
explicit_index_space_state * _state
The explicit state.