SheafSystem  0.0.0.0
product_section_space_schema_crg_range.h
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 #ifndef PRODUCT_SECTION_SPACE_SCHEMA_CRG_RANGE_H
22 #define PRODUCT_SECTION_SPACE_SCHEMA_CRG_RANGE_H
23 
24 #ifndef SHEAF_DLL_SPEC_H
25 #include "SheafSystem/sheaf_dll_spec.h"
26 #endif
27 
28 #ifndef SECTION_SPACE_SCHEMA_CRG_RANGE_H
29 #include "SheafSystem/section_space_schema_crg_range.h"
30 #endif
31 
32 namespace sheaf
33 {
34 class index_space_handle;
35 class ij_product_structure;
36 }
37 
38 namespace fiber_bundle
39 {
40 
41 class product_section_space_schema_poset;
42 class section_space_schema_table_dof_crg_range;
43 
44 using namespace sheaf;
45 
52 {
53 
54  // ===========================================================
56  // ===========================================================
58 
59 public:
60 
65 
70 
74  const ij_product_structure& product_structure() const;
75 
79  bool gathered_id_spaces_initialized() const;
80 
84  bool product_structure_initialized() const;
85 
89  bool table_dof_range_initialized() const;
90 
95  void update_gathered_id_spaces();
96 
100  void update_product_structure();
101 
102 protected:
103 
108  void initialize_gathered_id_spaces();
109 
114  void initialize_product_structure();
115 
119  void initialize_table_dof_range(section_space_schema_table_dof_crg_range& xtable_dof_range);
120 
124  const index_space_handle* gathered_id_space(poset_state_handle& xhost);
125 
130 
135 
140 
141 private:
142 
144 
145 
146  // ===========================================================
147  // SECTION_SPACE_SCHEMA_CRG_RANGE FACET
148  // ===========================================================
150 
151 public:
152 
153  using section_space_schema_crg_range::contains_member;
154 
159  virtual bool contains_member(pod_index_type xbase_space_id,
160  pod_index_type xfiber_schema_id) const;
161 
166  virtual void tuple(pod_index_type xindex,
167  pod_index_type& xbase_space_id,
168  pod_index_type& xfiber_schema_id) const;
169 
174  virtual void ordinal(pod_index_type xbase_space_id,
175  pod_index_type xfiber_schema_id,
176  pod_index_type& xindex) const;
177 
178 protected:
179 
180 private:
181 
183 
184 
185  // ===========================================================
186  // IMPLICIT_CRG_RANGE FACET
187  // ===========================================================
189 
190 public:
191 
192 protected:
193 
194 private:
195 
197 
198 
199  // ===========================================================
201  // ===========================================================
203 
204 public:
205 
209  static void get_size(const product_section_space_schema_poset& xhost,
210  size_type& result);
211 
215  virtual cover_set_iterator atoms() const;
216 
217 protected:
218 
219 private:
220 
222 
223 
224  // ===========================================================
226  // ===========================================================
228 
229 public:
230 
231 protected:
232 
237  virtual cover_set_iterator implicit_cover_iterator(bool xlower,
238  pod_index_type xmbr_index) const;
239 
244  virtual bool implicit_cover_is_empty(bool xlower, pod_index_type xmbr_index) const;
245 
250  virtual size_type implicit_cover_size(bool xlower, pod_index_type xmbr_index) const;
251 
256  virtual bool implicit_cover_contains_member(bool xlower,
257  pod_index_type xmbr_index,
258  pod_index_type xother_index) const;
259 
263  virtual pod_index_type implicit_first_cover_member(bool xlower,
264  pod_index_type xmbr_index) const;
265 
266 private:
267 
269 
270 
271  // ===========================================================
273  // ===========================================================
275 
276 public:
277 
278  using implicit_crg_range::is_jim;
279 
283  virtual bool is_jim(pod_index_type xmbr_index) const;
284 
285  using implicit_crg_range::dof_tuple_id;
286 
290  virtual const scoped_index& dof_tuple_id(pod_index_type xmbr_index) const;
291 
292 protected:
293 
294 private:
295 
297 
298 
299  // ===========================================================
301  // ===========================================================
303 
304 public:
305 
306 protected:
307 
311  virtual size_type implicit_private_data_size() const;
312 
316  virtual void get_implicit_private_data(block<pod_index_type>& xdata) const;
317 
321  virtual void put_implicit_private_data(const block<pod_index_type>& xdata);
322 
323 private:
324 
326 
327 
328  // ===========================================================
330  // ===========================================================
332 
333 public:
334 
338  virtual void finalize(poset_state_handle& xhost);
339 
340 protected:
341 
342 private:
343 
345 
346 
347  // ===========================================================
349  // ===========================================================
351 
352 public:
353 
357  virtual bool is_initialized() const;
358 
363  virtual const std::string& class_name() const;
364 
365 protected:
366 
367 private:
368 
372  static bool make_prototype();
373 
375 
376 
377  // ===========================================================
379  // ===========================================================
381 
382 public:
383 
387  virtual bool is_ancestor_of(const any *other) const;
388 
393  virtual product_section_space_schema_crg_range* clone() const;
394 
398  virtual bool invariant() const;
399 
400 protected:
401 
402 private:
403 
405 
406 };
407 
408 // ===========================================================
409 // NON-MEMBER FUNCTIONS
410 // ===========================================================
411 
412 } // end namespace fiber_bundle
413 
414 #endif // ifndef PRODUCT_SECTION_SPACE_SCHEMA_CRG_RANGE_H
const index_space_handle * _fiber_id_space
The gathered fiber schema hub id space.
pod_index_type ordinal(pod_index_type xi, pod_index_type xj, size_type xj_ub)
2-tuple to ordinal conversion.
A client handle for a general, abstract partially order set.
An abstract handle to a space of alternate integer identifiers (aliases) for a subset of a hub set of...
An schema poset for a section space represented by a Cartesian product subspace of the tensor product...
Abstract base class with useful features for all objects.
Definition: any.h:39
Abstract emulator for a range of implicit section space schema members.
const index_space_handle * _base_id_space
The gathered base space hub id space.
An index within the external ("client") scope of a given id space.
Definition: scoped_index.h:116
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
const section_space_schema_table_dof_crg_range * _table_dof_range
The table dof crg range.
Emulator for a range of implicit section space schema members representing the Cartesian product the ...
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
A 2D implementation of abstract_product_structure.
Namespace for the sheaves component of the sheaf system.
void tuple(pod_index_type x, size_type xj_ub, pod_index_type &xi, pod_index_type &xj)
Ordinal to 2-tuple conversion.
Namespace for the fiber_bundles component of the sheaf system.
Abstract emulator for a range of implicit section space schema members.