21 #include "SheafSystem/ijk_connectivity_index_space_interval.h" 23 #include "SheafSystem/abstract_product_structure.h" 24 #include "SheafSystem/assert_contract.h" 25 #include "SheafSystem/ijk_connectivity_implicit_index_space_iterator.h" 26 #include "SheafSystem/ijk_product_structure.h" 27 #include "SheafSystem/forwarding_index_space_handle.h" 28 #include "SheafSystem/explicit_index_space_state.h" 29 #include "SheafSystem/hub_index_space_handle.h" 30 #include "SheafSystem/index_space_family.h" 58 define_old_variable(
size_type old_id_spaces_end = xid_spaces.
end());
61 result_ptr->new_state(xid_spaces, xub);
63 result_ptr->_vertex_hub_begin = xvertex_hub_begin;
64 result_ptr->_j_size = xj_size;
65 result_ptr->_k_size = xk_size;
67 result_ptr->_j_vertex_size = result_ptr->_j_size+1;
68 result_ptr->_k_vertex_size = result_ptr->_k_size+1;
70 result_ptr->_jk_vertex_size = result_ptr->_j_vertex_size * result_ptr->_k_vertex_size;
76 ensure(&result.
id_spaces() == &xid_spaces);
77 ensure(result.
begin() == old_id_spaces_end);
78 ensure(result.
end() == xid_spaces.
end());
79 ensure(result.
end() == result.
begin() + xub);
82 ensure(result.
j_size() == xj_size);
83 ensure(result.
k_size() == xk_size);
127 ensure(is_basic_query);
131 return _vertex_hub_begin;
150 ordinal(i, j, k, _j_vertex_size, _k_vertex_size) + _vertex_hub_begin;
154 ensure(is_basic_query);
171 ensure(is_basic_query);
188 ensure(is_basic_query);
205 ensure(is_basic_query);
209 return _j_vertex_size;
222 ensure(is_basic_query);
226 return _k_vertex_size;
239 ensure(is_basic_query);
243 return _jk_vertex_size;
289 static const string result(
"ijk_connectivity_index_space_interval");
319 fiber_bundle::ijk_connectivity_index_space_interval::
419 ensure((*
this) == xother);
440 ensure(is_basic_query);
491 ensure(is_basic_query);
512 ensure(is_basic_query);
533 ensure(is_basic_query);
550 bool result = (0 <= xid) && (xid < 8);
554 ensure(is_basic_query);
584 result = ((0 <= loffset) && (loffset < 2));
590 result = ((0 <= loffset) && (loffset < 2));
602 result = ((0 <= loffset) && (loffset < 2));
608 result = ((0 <= loffset) && (loffset < 2));
614 ensure(is_basic_query);
631 bool result =
is_valid(xhub_id) && (
hub_pod(xlocal_id, xid) == xhub_id);
635 ensure(is_basic_query);
671 else if(loffset == 1)
694 else if(loffset == 1)
723 else if(loffset == 1)
746 else if(loffset == 1)
869 ensure(is_basic_query);
953 ensure(is_basic_query);
979 ensure(is_basic_query);
1004 ensure(is_basic_query);
1060 _handles.release(reinterpret_cast<forwarding_index_space_handle&>(xid_space));
1064 ensure(is_basic_query);
1082 bool result = (lid_space != 0) &&
_handles.allocated(*lid_space);
1086 ensure(is_basic_query);
1142 _iterators.release(reinterpret_cast<ijk_connectivity_implicit_index_space_iterator&>(xitr));
1146 ensure(is_basic_query);
1164 bool result = (litr != 0) &&
_iterators.allocated(*litr);
1168 ensure(is_basic_query);
1192 require(other != 0);
1252 size_t result = xinclude_shallow ?
sizeof(xn) : 0;
1264 ensure(result >= 0);
virtual ~ijk_connectivity_index_space_interval()
Destructor.
virtual bool is_persistent(pod_type xlocal_id) const
True if the id space with id xlocal_id should be written to disk.
pod_type end() const
The ending index of the id spaces.
list_pool< forwarding_index_space_handle > _handles
The handle pool.
An abstract class that defines the product structure for an id space.
virtual void release_id_space_iterator(index_space_iterator &xitr) const
Returns the id space iterator xitr to the iterator pool.
virtual bool has_product_structure(pod_type xlocal_id) const
True if the id space with id xlocal_id has a product structure.
virtual const index_space_family & id_spaces() const
The id space family for this (const version).
size_type k_vertex_size() const
The number of vertices in the k direction.
An abstract iterator over the ids of an 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.
static const ijk_connectivity_index_space_interval & new_space(index_space_family &xid_spaces, size_type xub, pod_type xvertex_hub_begin, size_type xj_size, size_type xk_size)
Create a new interval of id spaces for 2D structured block connectivity in the id space family xid_sp...
pod_index_type ordinal(pod_index_type xi, pod_index_type xj, size_type xj_ub)
2-tuple to ordinal conversion.
virtual index_space_interval & operator=(const index_space_collection &xother)
Assignment operator.
virtual pod_type end(pod_type xlocal_id) const
Ending id of this space with id xlocal_id.
virtual bool invariant() const
Class invariant.
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 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_ancestor_of(const any *other) const
Conformance test; true if other conforms to 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.
pod_type _vertex_hub_begin
The hub id of the beginning of the vertex id space.
pod_index_type pod_type
The "plain old data" index type for this.
virtual ijk_connectivity_index_space_interval * clone() const
Virtual constructor; create a new instance of the same type at this.
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 size_type ct(pod_type xlocal_id) const
The number of members for the id space with id xlocal_id.
An implementation of index_space_interval for an interval of implicit id spaces for the connectivity ...
Abstract base class with useful features for all objects.
virtual bool invariant() const
Class invariant.
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.
size_type _k_vertex_size
The number of vertices in the k direction.
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 immutable abstract state for a space of alternate integer identifiers (aliases) for a subset of th...
friend SHEAF_DLL_SPEC size_t deep_size(const ijk_connectivity_index_space_interval &xn, bool xinclude_shallow)
The deep size of ijk_connectivity_index_space_interval& xn.
virtual pod_type begin(pod_type xlocal_id) const
Beginning id of this 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.
size_type jk_vertex_size() const
The number of vertices in the j*k direction.
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
size_type _j_vertex_size
The number of vertices in the j direction.
virtual bool contains(pod_type xlocal_id, pod_type xid) const
True if the space with id xlocal_id contains id xid.
An implementation of implicit_index_space_iterator for an implicit id space in an ijk_connectivity_in...
list_pool< ijk_connectivity_implicit_index_space_iterator > _iterators
The iterator pool.
virtual const std::string & class_name() const
The name of this class.
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 bool operator==(const index_space_collection &xother) const
True if this is equivalent to xother.
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 ...
pod_type vertex_hub_begin() const
The hub id of the beginning of the vertex id space.
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 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 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.
size_type _k_size
The number of zones in the k direction.
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...
size_type _jk_vertex_size
The number of vertices in the j*k direction.
pod_type end() const
Ending space id of this interval in the id space family scope.
virtual void release_id_space(index_space_handle &xid_space) const
Returns the id space handle xid_space to the handle pool.
void tuple(pod_index_type x, size_type xj_ub, pod_index_type &xi, pod_index_type &xj)
Ordinal to 2-tuple conversion.
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 void remove(pod_type xlocal_id)
Remove the id space with id xlocal_id.
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...
size_type _j_size
The number of zones in the j direction.
SHEAF_DLL_SPEC bool is_valid(pod_index_type xpod_index)
True if an only if xpod_index is valid.
size_type j_vertex_size() const
The number of vertices in the j direction.
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.
ijk_connectivity_index_space_interval()
Default constructor.
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.
virtual ijk_connectivity_index_space_interval & operator=(const index_space_collection &xother)
Assignment operator.
size_type j_size() const
The number of zones in the j direction.
const hub_index_space_handle & hub_id_space() const
The hub id space of this family.
virtual bool contains(pod_type xid) const
True if this space contains id xid.
size_type k_size() const
The number of zones in the k direction.
virtual void delete_product_structure(pod_type xlocal_id)
Deletes the product structure for the id space with id xlocal_id.