21 #include "SheafSystem/abstract_product_structure.h" 22 #include "SheafSystem/array_index_space_interval.h" 23 #include "SheafSystem/assert_contract.h" 24 #include "SheafSystem/array_implicit_index_space_iterator.h" 25 #include "SheafSystem/forwarding_index_space_handle.h" 26 #include "SheafSystem/explicit_index_space_state.h" 27 #include "SheafSystem/hub_index_space_handle.h" 28 #include "SheafSystem/index_space_family.h" 47 require(xids_per_space > 0);
48 require(xhub_ids.
ub() >= xub*xids_per_space);
52 define_old_variable(
size_type old_id_spaces_end = xid_spaces.
end());
55 result_ptr->new_state(xid_spaces, xub);
57 result_ptr->_ids_per_space = xids_per_space;
58 result_ptr->_owns_hub_ids = xowns_hub_ids;
67 *(result_ptr->_hub_ids) = xhub_ids;
74 result_ptr->_hub_ids = &xhub_ids;
81 ensure(&result.
id_spaces() == &xid_spaces);
82 ensure(result.
begin() == old_id_spaces_end);
83 ensure(result.
end() == xid_spaces.
end());
84 ensure(result.
end() == result.
begin() + xub);
86 ensure(result.
hub_ids() == xhub_ids);
135 ensure(is_basic_query);
152 ensure(is_basic_query);
169 ensure(is_basic_query);
222 static const std::string result(
"array_index_space_interval");
252 sheaf::array_index_space_interval::
355 ensure((*
this) == xother);
376 ensure(is_basic_query);
427 ensure(is_basic_query);
448 ensure(is_basic_query);
469 ensure(is_basic_query);
490 ensure(is_basic_query);
520 for(
pod_type i = lbegin; i < lend; ++i)
531 ensure(is_basic_query);
554 ensure(is_basic_query);
584 for(
pod_type i = lbegin; i < lend; ++i)
640 ensure(is_basic_query);
724 ensure(is_basic_query);
750 ensure(is_basic_query);
775 ensure(is_basic_query);
831 _handles.release(reinterpret_cast<forwarding_index_space_handle&>(xid_space));
835 ensure(is_basic_query);
853 bool result = (lid_space != 0) &&
_handles.allocated(*lid_space);
857 ensure(is_basic_query);
913 _iterators.release(reinterpret_cast<array_implicit_index_space_iterator&>(xitr));
917 ensure(is_basic_query);
935 bool result = (litr != 0) &&
_iterators.allocated(*litr);
939 ensure(is_basic_query);
1023 size_t result = xinclude_shallow ?
sizeof(xn) : 0;
1049 ensure(result >= 0);
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.
pod_type end() const
The ending index of the id spaces.
size_type _ids_per_space
The number of ids per id space.
index_type ub() const
The upper bound on the storage array. The number of items current allocated in the storage array...
An abstract class that defines the product structure for an id space.
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...
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 pod_type begin(pod_type xlocal_id) const
Beginning id of the space with id xlocal_id.
virtual bool has_product_structure(pod_type xlocal_id) const
True if the id space with id xlocal_id has a product structure.
const block< pod_type > & hub_ids() const
The array of hub ids.
bool _owns_hub_ids
True if this interval is responsible for the memory management of _hub_ids.
virtual index_space_interval & operator=(const index_space_collection &xother)
Assignment operator.
virtual bool invariant() const
Class invariant.
friend SHEAF_DLL_SPEC size_t deep_size(const array_index_space_interval &xn, bool xinclude_shallow)
The deep size of array_index_space_interval& xn.
virtual bool invariant() const
Class invariant.
virtual array_index_space_interval * clone() const
Virtual constructor; create a new instance of the same type at this.
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.
virtual bool is_persistent(pod_type xlocal_id) const
True if the id space with id xlocal_id should be written to disk.
list_pool< array_implicit_index_space_iterator > _iterators
The iterator pool.
pod_index_type pod_type
The "plain old data" index type for this.
virtual pod_type end(pod_type xlocal_id) const
Ending id of the 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 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.
Abstract base class with useful features for all objects.
An implemenation of index_space_collection that adds an interface for the interval [begin()...
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 ~array_index_space_interval()
Destructor.
list_pool< forwarding_index_space_handle > _handles
The handle pool.
An immutable abstract state for a space of alternate integer identifiers (aliases) for a subset of th...
An implementation of implicit_index_space_iterator for an implicit id space in an array_index_space_i...
An implementation of class index_space_handle for an forwarding_index_space_state.
bool owns_hub_ids() const
True if this interval owns the array of hub ids. If owns_hub_ids(), this interval is responsible for ...
virtual size_type ct(pod_type xlocal_id) const
The number of members for the id space with id xlocal_id.
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.
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.
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
static const array_index_space_interval & new_space(index_space_family &xid_spaces, size_type xub, block< pod_type > &xhub_ids, size_type xids_per_space, bool xowns_hub_ids)
Create a new interval of id spaces with an array representation in the id space family xid_spaces wit...
virtual void release_id_space(index_space_handle &xid_space) const
Returns the id space handle xid_space to the handle pool.
virtual bool operator==(const index_space_collection &xother) const
True if this is equivalent to xother.
size_type ids_per_space() const
The number of ids per id space.
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 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 array_index_space_interval & operator=(const index_space_collection &xother)
Assignment operator.
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...
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 void delete_product_structure(pod_type xlocal_id)
Deletes the product structure for the id space with id xlocal_id.
virtual void release_id_space_iterator(index_space_iterator &xitr) const
Returns the id space iterator xitr to the iterator pool.
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.
array_index_space_interval()
Default constructor.
virtual const std::string & class_name() const
The name of this class.
virtual bool is_ancestor_of(const any *other) const
Conformance test; true if other conforms to this.
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 bool is_attached() const =0
True if this iterator is attached to a state.
bool invariant_check() const
True if invariant checking is enabled.
block< pod_type > * _hub_ids
The array of hub ids.
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 end() const
Ending space id of this interval in the id space family scope.
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).
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.
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.
An implementation of index_space_interval for an interval of implicit id spaces in which the hub ids ...