21 #ifndef INDEX_SPACE_FAMILY_H 22 #define INDEX_SPACE_FAMILY_H 24 #ifndef SHEAF_DLL_SPEC_H 25 #include "SheafSystem/sheaf_dll_spec.h" 29 #include "SheafSystem/any.h" 32 #ifndef EXPLICIT_INDEX_SPACE_COLLECTION_H 33 #include "SheafSystem/explicit_index_space_collection.h" 36 #ifndef HUB_INDEX_SPACE_HANDLE_H 37 #include "SheafSystem/hub_index_space_handle.h" 40 #ifndef INTERVAL_INDEX_SPACE_HANDLE_H 41 #include "SheafSystem/interval_index_space_handle.h" 44 #ifndef NAME_MULTIMAP_H 45 #include "SheafSystem/name_multimap.h" 49 #include "SheafSystem/pod_types.h" 52 #ifndef STD_UNORDERED_SET_H 53 #include "SheafSystem/std_unordered_set.h" 57 #include "SheafSystem/std_map.h" 64 class explicit_index_space_interval;
65 class index_space_family;
66 class index_space_family_iterator;
67 class index_space_interval;
68 class index_space_iterator;
69 class index_space_state;
70 class scattered_insertion_index_space_handle;
71 class primary_sum_index_space_state;
119 std::string name(pod_type xid)
const;
126 pod_type index(
const std::string& xname)
const;
131 void put_name(pod_type xid,
const std::string& xname);
136 bool contains(pod_type xid)
const;
141 bool contains(
const std::string& xname)
const;
146 pod_type begin()
const;
151 pod_type end()
const;
156 bool has_only_standard_id_spaces()
const;
161 void update_standard_id_spaces();
166 void clear_id_spaces();
211 void delete_space(pod_type xid);
216 void delete_space(
const std::string& xname);
222 bool is_explicit_interval(pod_type xid);
230 pod_type new_primary_state(
size_type xct);
236 pod_type new_primary_state(pod_type xid,
size_type xct);
241 void delete_primary_state(pod_type xid);
247 void new_state(
const std::string& xname,
const std::string& xstate_class_name);
252 void delete_state(pod_type xid);
262 void delete_interval(pod_type xid);
277 pod_type reserve_next_explicit_id();
282 static size_type explicit_interval_size();
334 pod_type new_id(pod_type xid);
339 void delete_id(pod_type xid);
355 void update_gathered_hub_id_space();
365 bool has_gathered_hub_id_space()
const;
370 bool gathered_hub_id_space_excludes_bottom()
const;
375 static const std::string& hub_id_space_name();
381 bool is_valid_reserved_id(pod_type xid)
const;
433 size_type ct(
const std::string& xname)
const;
443 bool is_empty(
const std::string& xname)
const;
448 bool is_empty(pod_type xspace_id)
const;
453 pod_type begin(
const std::string& xname)
const;
458 pod_type begin(pod_type xspace_id)
const;
463 pod_type end(
const std::string& xname)
const;
468 pod_type end(pod_type xspace_id)
const;
473 pod_type hub_begin(
const std::string& xname)
const;
478 pod_type hub_begin(pod_type xspace_id)
const;
483 bool is_gathered(
const std::string& xname)
const;
488 bool is_gathered(pod_type xspace_id)
const;
493 bool contains(
const std::string& xname, pod_type xid)
const;
498 bool contains(pod_type xspace_id, pod_type xid)
const;
504 bool contains(
const std::string& xname,
const scoped_index& xid)
const;
510 bool contains(pod_type xspace_id,
const scoped_index& xid)
const;
517 bool contains_hub(
const std::string& xname, pod_type xid)
const;
524 bool contains_hub(pod_type xspace_id, pod_type xid)
const;
530 bool contains_unglued_hub(
const std::string& xname, pod_type xid)
const;
536 bool contains_unglued_hub(pod_type xspace_id, pod_type xid)
const;
542 bool contains_glued_hub(
const std::string& xname, pod_type xid)
const;
548 bool contains_glued_hub(pod_type xspace_id, pod_type xid)
const;
555 bool contains(
const std::string& xname, pod_type xid,
const scoped_index& xhub_id)
const;
562 bool contains(pod_type xspace_id, pod_type xid,
const scoped_index& xhub_id)
const;
568 bool contains(
const std::string& xname, pod_type xid, pod_type xhub_id)
const;
574 bool contains(pod_type xspace_id, pod_type xid, pod_type xhub_id)
const;
580 pod_type pod(
const std::string& xname, pod_type xid)
const;
586 pod_type pod(pod_type xspace_id, pod_type xid)
const;
592 pod_type pod(
const std::string& xname,
const scoped_index& xid)
const;
598 pod_type pod(pod_type xspace_id,
const scoped_index& xid)
const;
605 pod_type hub_pod(
const std::string& xname, pod_type xid)
const;
612 pod_type hub_pod(pod_type xspace_id, pod_type xid)
const;
618 pod_type unglued_hub_pod(
const std::string& xname, pod_type xid)
const;
624 pod_type unglued_hub_pod(pod_type xspace_id, pod_type xid)
const;
630 pod_type glued_hub_pod(
const std::string& xname, pod_type xid)
const;
636 pod_type glued_hub_pod(pod_type xspace_id, pod_type xid)
const;
641 bool is_persistent(
const std::string& xname)
const;
646 bool is_persistent(pod_type xspace_id)
const;
666 void glue(pod_type xid, pod_type xrep);
671 void unglue(pod_type xid);
678 void unglue_all(pod_type xrep_id);
683 bool has_gluing()
const;
703 void new_product_structure(
const std::string& xname,
710 void new_product_structure(pod_type xspace_id,
716 void delete_product_structure(
const std::string& xname);
721 void delete_product_structure(pod_type xspace_id);
747 const T& product_structure(
const std::string& xname)
const;
753 const T& product_structure(pod_type xspace_id)
const;
759 T& product_structure(
const std::string& xname);
765 T& product_structure(pod_type xspace_id);
770 bool has_product_structure(
const std::string& xname)
const;
775 bool has_product_structure(pod_type xspace_id)
const;
782 bool product_structure_conforms_to(
const std::string& xname)
const;
789 bool product_structure_conforms_to(pod_type xspace_id)
const;
822 T& get_id_space(
const std::string& xname)
const;
829 T& get_id_space(pod_type xspace_id)
const;
835 bool handle_conforms_to_state(
const std::string& xname)
const;
841 bool handle_conforms_to_state(pod_type xspace_id)
const;
908 virtual bool is_ancestor_of(
const any *other)
const;
913 virtual bool invariant()
const;
942 #endif // ifndef INDEX_SPACE_FAMILY_H An implementation of class scattered_insertion_index_space_handle that has a interval id space state...
The data structure representing the cover relation graph of a poset.
An abstract class that defines the product structure for an id space.
An abstract iterator over the ids of an id space.
hub_index_space_handle _hub_id_space
The hub id space.
A client handle for a general, abstract partially order set.
interval_map_type::const_iterator const_interval_iterator_type
Type of interval map iterator.
A partial multi-valued relation with total injective inverse between names and indices of type index_...
pod_type _standard_end
Ending index of the standard id spaces.
pod_type _end
Ending index of the id spaces.
An abstract handle to a space of alternate integer identifiers (aliases) for a subset of a hub set of...
An implementation of class sum_index_space_handle that has a primary sum id space state...
interval_map_type::iterator interval_iterator_type
Type of interval map iterator.
An abstract iterator over the id spaces of a interval.
Abstract base class with useful features for all objects.
An implemenation of index_space_collection that adds an interface for the interval [begin()...
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.
An implementation of class index_space_handle for an forwarding_index_space_state.
std::map< pod_type, index_space_interval * > interval_map_type
Type of interval map.
An index within the external ("client") scope of a given id space.
SHEAF_DLL_SPEC size_t deep_size(const dof_descriptor_array &xp, bool xinclude_shallow=true)
The deep size of the referenced object of type dof_descriptor_array.
A wrapper/adapter for the id space names record. Intended for transferring id map data between the ke...
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
pod_index_type pod_type
The "plain old data" index type for this.
An implementation of class index_space_iterator for id spaces that are implicitly represtented...
interval_map_type _intervals
Map from id to id space interval.
index_space_family(const index_space_family &xother)
Copy constructor; disabled.
A collection of id space states. This is a virtual class with provides an interface for accessing the...
An implementation of index_space_interval for an interval of explicit id spaces.
pod_type _next_explicit_id
The next available id for an explicit index space.
explicit_index_space_interval * _explicit_interval
The current explicit id space interval.
An implementation of class index_space_iterator for an explicit_index_space_state.
int_type pod_index_type
The plain old data index type.
SHEAF_DLL_SPEC std::ostream & operator<<(std::ostream &os, const dof_descriptor_array &p)
Insert dof_descriptor_array& p into ostream& os.
Namespace for the sheaves component of the sheaf system.
An implementation of class sum_index_space_state intended for use as the sum of the primary id spaces...
Factory and container for a family of id spaces.
interval_index_space_handle _gathered_hub_id_space
The gathered hub id space.