21 #include "SheafSystem/i_connectivity_index_space_interval.h" 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" 53 define_old_variable(
size_type old_id_spaces_end = xid_spaces.
end());
56 result_ptr->new_state(xid_spaces, xub);
58 result_ptr->_vertex_hub_begin = xvertex_hub_begin;
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);
113 ensure(is_basic_query);
117 return _vertex_hub_begin;
128 pod_type result = xlocal_id + _vertex_hub_begin;
132 ensure(is_basic_query);
182 static const string result(
"i_connectivity_index_space_interval");
212 fiber_bundle::i_connectivity_index_space_interval::
302 ensure((*
this) == xother);
323 ensure(is_basic_query);
374 ensure(is_basic_query);
395 ensure(is_basic_query);
416 ensure(is_basic_query);
433 bool result = (0 <= xid) && (xid < 2);
437 ensure(is_basic_query);
455 bool result = result = ((0 <= loffset) && (loffset < 2));
459 ensure(is_basic_query);
476 bool result =
is_valid(xhub_id) && (
hub_pod(xlocal_id, xid) == xhub_id);
480 ensure(is_basic_query);
499 if((result < 0) || (2 >= result))
526 ((0 <= xid) && (xid < 2)) ?
552 ensure(is_basic_query);
636 ensure(is_basic_query);
662 ensure(is_basic_query);
687 ensure(is_basic_query);
743 _handles.release(reinterpret_cast<forwarding_index_space_handle&>(xid_space));
747 ensure(is_basic_query);
765 bool result = (lid_space != 0) &&
_handles.allocated(*lid_space);
769 ensure(is_basic_query);
825 _iterators.release(reinterpret_cast<i_connectivity_implicit_index_space_iterator&>(xitr));
829 ensure(is_basic_query);
847 bool result = (litr != 0) &&
_iterators.allocated(*litr);
851 ensure(is_basic_query);
935 size_t result = xinclude_shallow ?
sizeof(xn) : 0;
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 bool invariant() const
Class invariant.
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...
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.
An implemenation of index_space_collection that adds an interface for the interval [begin()...
i_connectivity_index_space_interval()
Default constructor.
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.
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...
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 ...
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.
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.
virtual ~i_connectivity_index_space_interval()
Destructor.
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.
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.
bool is_same_type(const any *other) const
True if other is the same type as this.
void enable_invariant_check() const
Enable invariant checking.
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.