SheafSystem  0.0.0.0
binary_section_space_schema_poset.cc
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 #include "SheafSystem/binary_section_space_schema_poset.h"
22 
23 #include "SheafSystem/abstract_poset_member.h"
24 #include "SheafSystem/array_poset_dof_map.h"
25 #include "SheafSystem/base_space_member.h"
26 #include "SheafSystem/base_space_poset.h"
27 #include "SheafSystem/binary_section_space_schema_member.impl.h"
28 #include "SheafSystem/index_iterator.h"
29 #include "SheafSystem/namespace_poset.impl.h"
30 #include "SheafSystem/namespace_poset_member.h"
31 #include "SheafSystem/poset_handle_factory.h"
32 #include "SheafSystem/poset_member_iterator.h"
33 #include "SheafSystem/poset_state.h"
34 #include "SheafSystem/poset_type.h"
35 #include "SheafSystem/postorder_member_iterator.h"
36 #include "SheafSystem/schema_poset_member.h"
37 #include "SheafSystem/sec_rep_descriptor_poset.h"
38 #include "SheafSystem/sheaves_namespace.h"
39 #include "SheafSystem/subposet.h"
40 
41 using namespace std;
42 using namespace fiber_bundle; // Workaround for MS C++ bug.
43 
44 // ===========================================================
45 // BINARY_SECTION_SPACE_SCHEMA_POSET FACET
46 // ===========================================================
47 
48 // PUBLIC FUNCTIONS
49 
53  const poset_path& xpath,
54  const poset_path& xschema_path,
55  const poset_path& xbase_path,
56  const poset_path& xfiber_path,
57  const poset_path& xrep_path,
58  bool xauto_access)
59 {
60  // cout << endl << "Entering binary_section_space_schema_poset::new_table." << endl;
61 
62  // Preconditions:
63 
64  require(!xpath.empty());
65  require(!xns.contains_path(xpath, xauto_access));
66 
67  require(xschema_path.full());
68  require(xns.path_is_auto_read_accessible(xschema_path, xauto_access));
69  require(schema_poset_member::conforms_to(xns, xschema_path, standard_schema_path(), xauto_access));
70 
71  require(xbase_path.full());
72  require(xns.path_is_auto_read_accessible<base_space_poset>(xbase_path, xauto_access));
73 
74  require(!xfiber_path.empty());
75  require(xns.path_is_auto_read_accessible(xfiber_path, xauto_access));
76 
77  require(xrep_path.full());
78  require(xns.path_is_auto_read_accessible<sec_rep_descriptor_poset>(xrep_path, xauto_access));
79 
80 
81  // Body:
82 
83  // Create the table; have to new it because namespace keeps a pointer.
84 
85  typedef binary_section_space_schema_poset table_type;
86 
87  table_type& result = *(new table_type());
88 
89  // Create a handle of the right type for the schema member.
90 
91  schema_poset_member lschema(&xns, xschema_path, xauto_access);
92 
93  if(xauto_access)
94  {
95  lschema.get_read_access();
96  }
97 
98  // Create the table dof map and set dof values;
99  // must be newed because poset_state::_table keep a pointer to it.
100 
101  array_poset_dof_map* lmap = new array_poset_dof_map(&lschema, true);
102  lmap->put_dof("base_space_path", xbase_path);
103  lmap->put_dof("fiber_space_path", xfiber_path);
104  lmap->put_dof("rep_path", xrep_path);
105 
106  // Create the state.
107 
108  result.new_state(xns, xpath, lschema, *lmap);
109 
110  if(xauto_access)
111  {
112  lschema.release_access();
113  }
114 
115 
116  // Postconditions:
117 
118  ensure(xns.owns(result, xauto_access));
119  ensure(result.path(true) == xpath);
120  ensure(result.state_is_not_read_accessible());
121  ensure(result.schema(true).path(xauto_access) == xschema_path);
122 
123  ensure(unexecutable("result.base_space_path() == xbase_space_path"));
124  ensure(unexecutable("result.fiber_space_path() == xfiber_space_path"));
125  ensure(unexecutable("result.rep_path() == xrep_path"));
126 
127 
128  // Exit:
129 
130  // cout << "Leaving binary_section_space_schema_poset::new_table." << endl;
131  return result;
132 }
133 
134 // PROTECTED FUNCTIONS
135 
140 {
141  // Preconditions:
142 
143  // Body:
144 
145  // Nothing to do, handled by base class
146 
147  // Postconditions:
148 
149  ensure(!is_attached());
150  ensure(!top().is_attached());
151  ensure(!bottom().is_attached());
152 }
153 
156 {
157  // Preconditions:
158 
159  // Body:
160 
161  // Nothing to do; base class does it all.
162  // Currently, this routine exists mostly for the precondition,
163  // which is the same as poset_state_handle::~poset_state_handle.
164  // With this precondition in place, the source of a precondition
165  // violation will be clearer to the client.
166 
167  // Postconditions:
168 
169  // Exit
170 
171  return;
172 }
173 
174 bool
177 {
178  // Preconditions:
179 
180  // Body:
181 
182  poset_type ltype = BINARY_SECTION_SPACE_SCHEMA_POSET_ID;
183 
186 
187  factory().insert_prototype(lproto);
188  factory().insert_prototype(ltype, lproto);
189 
190  // Postconditions:
191 
192  // Exit:
193 
194  return true;
195 }
196 
197 // PRIVATE FUNCTIONS
198 
199 
200 // ===========================================================
201 // SECTION_SPACE_SCHEMA_POSET FACET
202 // ===========================================================
203 
204 // PUBLIC FUNCTIONS
205 
209  pod_index_type xfiber_schema_id) const
210 {
211  // Preconditions:
212 
213  require(state_is_read_accessible());
214  require(base_space().contains_member(xbase_space_id));
215  require(fiber_schema().contains_member(xfiber_schema_id));
216 
217 
218  // Body:
219 
221  // Assume base space id is first index, fiber schema id is second.
222 
223  pod_index_type result =
224  xbase_space_id*base_space_stride() +
225  xfiber_schema_id*fiber_schema_stride();
226 
227  // Postconditions:
228 
229  // Exit
230 
231  return result;
232 }
233 
234 // PROTECTED FUNCTIONS
235 
236 // PRIVATE FUNCTIONS
237 
238 
239 // ===========================================================
240 // STATE FACET
241 // ===========================================================
242 
243 // PUBLIC FUNCTIONS
244 
247 type_id() const
248 {
249  return BINARY_SECTION_SPACE_SCHEMA_POSET_ID;
250 }
251 
252 const char*
254 class_name() const
255 {
256  // Preconditions:
257 
258  // Body:
259 
260  static const char* result = "binary_section_space_schema_poset";
261 
262  // Postconditions:
263 
264  // Exit:
265 
266  return result;
267 }
268 
269 // PROTECTED FUNCTIONS
270 
271 void
273 new_state(const poset_path& xpath, const schema_poset_member& xschema, array_poset_dof_map& xdof_map)
274 {
275 
276  // Preconditions:
277 
278  require(schema_is_ancestor_of(&xschema));
279  require(xschema.state_is_read_accessible());
280 
283 
285 
286  require(unexecutable(xschema.is_same_state(xdof_map.schema())));
287 
288  require(unexecutable("rep in xdof_map exists"));
289  require(unexecutable("rep in xdof_map is read accessible"));
290 
291  require(unexecutable("base space in xdof_map exists"));
292  require(unexecutable("base space in xdof_map is read accessible"));
293 
294  require(unexecutable("fiber space in xdof_map exists"));
295  require(unexecutable("fiber space in xdof_map is read accessible"));
296 
297  require(unexecutable("rep in xdof_map is valid for base and fiber in xdof_map"));
298 
299 
300  // Body:
301 
302  // Disable invariant checking in
303  // member functions until construction finished.
304 
306 
307  string lname = xpath.poset_name();
308 
309  // Create the poset state object;
310  // allocates the data structures but does not (fully) initialize them.
311 
312  _state = new poset_state(&xschema, BINARY_SECTION_SPACE_SCHEMA_POSET_ID, lname);
313 
314  // Get write access;
315  // handle data members aren't attached yet,
316  // so use psh version.
317 
319 
320  // Initialize the table dofs.
321  // Must be called before initialize_standard_members
322  // because precondition contains_member in put_member_dof_tuple_id
323  // called from new_member indirectly needs table dofs.
324 
325  initialize_table_dof_tuple(&xdof_map);
326 
327  // Initialize any additional handle data members
328  // that may depend on table dofs.
329 
330  // $$SCRIBBLE: should merge two new_state signatures into a single routine
331  // and move to poset_state_handle.
332  // initialize_handle_data_members(*name_space());
334 
335  // Release and regain access;
336  // will get access to handle data members.
337 
340 
341  // Initialize the row structure.
342 
345 
346  // Set the standard id spaces.
347 
349 
350  // Now invariant should be satisfied
351 
353 
354  // Postconditions:
355 
356  ensure(invariant());
357  ensure(is_attached());
358  ensure(!in_jim_edit_mode());
359  ensure(schema().is_same_state(&xschema));
361  ensure(has_standard_subposet_ct());
362  ensure(member_id_spaces(false).has_only_standard_id_spaces());
363  ensure(&(table_dof_map()) == &xdof_map);
364  ensure(rep().is_attached());
365  ensure(base_space().is_attached());
366  ensure(fiber_schema().is_attached());
367  ensure(fiber_space().is_attached());
368 
369  // Now we're finished, release all access
370 
371  release_access();
372 
373  // One final postcondition
374 
376 
377  // Exit:
378 
379  return;
380 }
381 
382 // PRIVATE FUNCTIONS
383 
384 
385 // ===========================================================
386 // COVER RELATION FACET
387 // ===========================================================
388 
389 // PUBLIC FUNCTIONS
390 
391 bool
394 {
395  bool result = false;
396 
397  // Preconditions:
398 
399  require(state_is_read_accessible());
400  require(contains_member(xlesser));
401  require(contains_member(xgreater));
402 
403  // Body:
404 
405  pod_index_type lgreater_base_id = get_base_space_id_from_index(xgreater);
406  pod_index_type lgreater_fiber_id = get_fiber_schema_id_from_index(xgreater);
407  pod_index_type llesser_base_id = get_base_space_id_from_index(xlesser);
408  pod_index_type llesser_fiber_id = get_fiber_schema_id_from_index(xlesser);
409 
410  result =
411  ( base_space().contains_link(lgreater_base_id, llesser_base_id) && (lgreater_fiber_id == llesser_fiber_id)) ||
412  ( (lgreater_base_id == llesser_base_id) && fiber_schema().contains_link(lgreater_fiber_id, llesser_fiber_id));
413 
414  // Postconditions:
415 
416  // Exit
417 
418  return result;
419 }
420 
423 cover_ct(bool xlower, pod_index_type xhub_id) const
424 {
425  size_type result;
426 
427  // Preconditions:
428 
429  require(state_is_read_accessible());
430  require(contains_member(xhub_id));
431 
432  // Body:
433 
434  result = base_space().cover_ct(xlower, get_base_space_id_from_index(xhub_id)) +
436 
437  // Postconditions:
438 
439  // Exit
440 
441  return result;
442 }
443 
444 bool
446 le(const pod_index_type xgreater, const pod_index_type xlesser) const
447 {
448  bool result = false;
449 
450  // Preconditions:
451 
452  require(state_is_read_accessible());
453  require(contains_member(xlesser));
454  require(contains_member(xgreater));
455 
456  // Body:
457 
458  pod_index_type lgreater_base_id = get_base_space_id_from_index(xgreater);
459  pod_index_type llesser_base_id = get_base_space_id_from_index(xlesser);
460  pod_index_type lgreater_fiber_id = get_fiber_schema_id_from_index(xgreater);
461  pod_index_type llesser_fiber_id = get_fiber_schema_id_from_index(xlesser);
462 
463  result = base_space().le(lgreater_base_id, llesser_base_id) &&
464  fiber_schema().le(lgreater_fiber_id, llesser_fiber_id);
465 
466  // Postconditions:
467 
468  // Exit
469 
470  return result;
471 }
472 
473 bool
475 leqv(pod_index_type xgreater, pod_index_type xlesser) const
476 {
477  bool result = false;
478 
479  // Preconditions:
480 
481  require(state_is_read_accessible());
482  require(contains_member(xlesser));
483  require(contains_member(xgreater));
484 
485  // Body:
486 
487  pod_index_type lgreater_base_id = get_base_space_id_from_index(xgreater);
488  pod_index_type llesser_base_id = get_base_space_id_from_index(xlesser);
489  pod_index_type lgreater_fiber_id = get_fiber_schema_id_from_index(xgreater);
490  pod_index_type llesser_fiber_id = get_fiber_schema_id_from_index(xlesser);
491 
492  result = base_space().leqv(lgreater_base_id, llesser_base_id) &&
493  fiber_schema().leqv(lgreater_fiber_id, llesser_fiber_id);
494 
495  // Postconditions:
496 
497  // Exit
498 
499  return result;
500 }
501 
502 bool
504 is_jem(pod_index_type xhub_id, pod_index_type xother) const
505 {
506  bool result = false;
507 
508  // Preconditions:
509 
510  require(state_is_read_accessible());
511  require(contains_member(xhub_id));
512  require(contains_member(xother));
513 
514  // Body:
515 
516  result =
519 
520  // Postconditions:
521 
522  // Exit
523 
524  return result;
525 }
526 
530 {
531  // Preconditions:
532 
533  require(state_is_read_accessible());
534  require(contains_member(xhub_id));
535 
536  // Body:
537 
540 
541  pod_index_type result = get_index_from_components(lbase_jem, lfiber_jem);
542 
543  // Postconditions:
544 
545  // Exit
546 
547  return result;
548 }
549 
552 least_jem(pod_index_type xhub_id) const
553 {
554  // Preconditions:
555 
556  require(state_is_read_accessible());
557  require(contains_member(xhub_id));
558 
559  // Body:
560 
563 
564  pod_index_type result = get_index_from_components(lbase_jem, lfiber_jem);
565 
566  // Postconditions:
567 
568  // Exit
569 
570  return result;
571 }
572 
573 void
576 {
577  // Preconditions:
578 
579  require(xjem1 !=~ xjem2);
580  require(!is_jem(xjem1, BOTTOM_INDEX));
582  require(contains_member(xjem1));
583  require(contains_member(xjem2));
584  require(!is_jim(xjem1));
585  require(!is_jim(xjem2));
586  require(cover_is_equal(LOWER, xjem1, xjem2));
587 
588  // Body:
589 
590  not_implemented();
591 
593 
594  // Postconditions:
595 
596  ensure(le(xjem1, xjem2));
597 
598  // Exit
599 
600  return;
601 }
602 
603 // PROTECTED FUNCTIONS
604 
605 // PRIVATE FUNCTIONS
606 
607 
608 // ===========================================================
609 // I/O SUPPORT FACET
610 // ===========================================================
611 
612 // PUBLIC FUNCTIONS
613 
616 new_schema_handle(const std::string& xid_space_name,
617  pod_index_type xschema_member_ext_id,
618  pod_index_type xbase_space_ext_id,
619  pod_index_type xfiber_schema_ext_id,
620  pod_index_type xlocal_schema_ext_id)
621 {
622  // Preconditions:
623 
624  // Body:
625 
626  // Create a handle of the type appropriate for members of this
627  // which will be used as a schema.
628 
630 
631  // Get the internal id for the base space.
632 
633  pod_index_type lbase_id =
634  base_space().get_int_id(xbase_space_ext_id, xid_space_name, false);
635 
636  // Get the internal id for the fiber schema.
637 
638  pod_index_type lfiber_id =
639  fiber_schema().get_int_id(xfiber_schema_ext_id, xid_space_name, false);
640 
641  // Get the member id from its components
642 
643  pod_index_type lint_id = get_index_from_components(lbase_id, lfiber_id);
644 
645  // Attach the handle.
646 
647  result->attach_to_state(this, lint_id);
648 
649  // Postconditions:
650 
651  ensure(result != 0);
652  ensure(schema_is_ancestor_of(result));
653  ensure(result->is_attached());
654 
655  // Exit
656 
657  return result;
658 }
659 
660 // PROTECTED FUNCTIONS
661 
662 // PRIVATE FUNCTIONS
663 
664 
665 // ===========================================================
666 // ANY FACET
667 // ===========================================================
668 
669 // PUBLIC FUNCTIONS
670 
671 bool
673 is_ancestor_of(const any* xother) const
674 {
675  bool result;
676 
677  // Preconditions:
678 
679  // Body:
680 
681  result = dynamic_cast<const binary_section_space_schema_poset*>(xother) != 0;
682 
683  // Postconditions:
684 
685  // Exit
686 
687  return result;
688 }
689 
690 bool
692 invariant() const
693 {
694  bool result = true;
695 
696  result = result && section_space_schema_poset::invariant();
697 
698  if(invariant_check())
699  {
701 
704 
705  invariance(state_is_read_accessible() ?
707  true);
708 
709 
711  }
712 
713  return result;
714 }
715 
716 // PROTECTED FUNCTIONS
717 
720 clone() const
721 {
723 
724  // Preconditions:
725 
726  // Body:
727 
729 
730  // Postconditions:
731 
732  ensure(result != 0);
733  ensure(!result->is_attached());
734 
735  // Exit
736 
737  return result;
738 }
739 
740 // PRIVATE FUNCTIONS
741 
742 
743 
virtual void get_read_write_access(bool xrelease_read_only_access=false)
Get read write access to the state associated with this. If release_read_only_access is requested...
int fiber_schema_stride() const
The increment in the member id when the id of the fiber schema component is increased by one...
virtual const char * class_name() const
The name of this class.
void insert_prototype(const poset_state_handle *xprototype)
Sets xprototype as the prototype for its client class.
virtual binary_section_space_schema_poset * clone() const
Virtual constructor; creates a new handle of the same actual type as this, attached to the same state...
A client handle for a poset member which has been prepared for use as a schema for a section space...
bool full() const
True if both poset name and member name are not empty.
Definition: poset_path.cc:311
The private state of a partially ordered set.
Definition: poset_state.h:49
virtual size_type cover_ct(bool xlower, pod_index_type xmbr_hub_id) const
The number of members in the lower cover (xlower true) or upper cover (xlower false) of the member wi...
void initialize_table_dof_tuple(array_poset_dof_map *xdof_tuple)
Installs xdof_tuple as the table dof tuple.
bool state_is_read_accessible() const
True if this is attached and if the state is accessible for read or access control is disabled...
bool path_is_auto_read_accessible(const poset_path &xpath, bool xauto_access) const
True if the state referred to xpath exists and is auto read accessible.
The standard fiber bundles name space; extends the standard sheaves namespace by defining base space...
virtual pod_index_type greatest_jem(pod_index_type xhub_id) const
The index of the largest member which is join-equivalent to hub id xhub_id.
poset_type
Identifiers for poset types.
Definition: poset_type.h:41
virtual void get_read_write_access(bool xrelease_read_only_access=false)
Get read write access to the state associated with this. If release_read_only_access is requested...
virtual schema_poset_member & schema()
The schema on which this is allocated (mutable version).
virtual pod_index_type get_base_space_id_from_index(pod_index_type xmbr_hub_id) const
Computes the base space member id associated with hub id xmbr_hub_id.
virtual bool le(pod_index_type xgreater, pod_index_type xlesser) const
True if xlesser is less than or equal to hub id xgreater.
A path defined by a poset name and a member name separated by a forward slash (&#39;/&#39;). For example: "cell_definitions/triangle".
Definition: poset_path.h:48
section_space_schema_member & top()
The top of member of the lattice (mutable version)
const index_space_family & member_id_spaces(bool xauto_access) const
Collection of member id spaces for this (const version).
virtual void initialize_standard_subposets(const std::string &xname)
Creates the subposets common to every poset (e.g. whole() and jims()).
STL namespace.
bool is_same_state(const poset_state_handle *xhost, pod_index_type xhub_id) const
True is this is attached to state with hub id xhub_id in host xhost.
A schema poset for a section space. A binary Cartesian product subspace of the binary tensor product ...
virtual bool le(pod_index_type xgreater, pod_index_type xlesser) const
True if hub id xlesser is less than or equal to hub id xgreater.
virtual void get_read_access() const
Get read access to the state associated with this.
virtual namespace_poset * name_space() const
The namespace of host()
The poset for sec_rep_descriptors.
virtual bool is_jem(pod_index_type xmbr_hub_id, pod_index_type xother_hub_id) const
True if hub id xother_hub_id is join equivalent to hub id xmbr_hub_id.
virtual void release_access(bool xall=false) const
Release access. If xall is true, release all levels of access. Otherwise, release one level of access...
virtual bool invariant() const
Class invariant.
Abstract base class with useful features for all objects.
Definition: any.h:39
poset & fiber_space()
The fiber space for section spaces on this schema.
The lattice of closed cells of a cellular space; a lattice representation of a computational mesh...
virtual bool contains_link(pod_index_type xgreater, pod_index_type xlesser) const
True if there is a cover link between hub id xgreater and hub id xlesser.
pod_index_type get_int_id(pod_index_type xext_id, const std::string &xid_space_name, bool xauto_access) const
Translates xext_id to an internal id using the equivalence map with name xid_space_name.
virtual schema_poset_member & schema()
The schema for this poset (mutable version).
bool has_standard_subposet_ct() const
True if poset is in its initial state, that is, it contains just the standard subposets.
void update_standard_member_id_spaces()
Update the initially allocated id spaces.
bool state_is_read_write_accessible() const
True if this is attached and if the state is accessible for read and write or access control is disab...
bool has_standard_row_dof_tuple_ct() const
True if poset is in its initial state, that is, it contains just the standard row_dof_tuples.
virtual size_type cover_ct(bool xlower, pod_index_type xhub_id) const
The number of members in the lower cover (xlower true) or upper cover (xlower false) of the member wi...
bool owns(const poset_state_handle &xposet, bool xauto_access) const
True if and only if this contains the poset xposet. synonym for contains_poset(xposet.poset_path(true), xauto_access)
virtual bool leqv(pod_index_type xgreater, pod_index_type xlesser) const
True if xlesser is less than or equivalent to hub id xgreater.
virtual bool is_attached() const
True if this handle is attached to a non-void state.
unsigned long size_type
An unsigned integral type used to represent sizes and capacities.
Definition: sheaf.h:52
std::string poset_name() const
The poset name part of the path.
Definition: poset_path.cc:473
bool contains_path(const poset_path &xpath, bool xauto_access=true) const
True if this contains the poset or poset member specified by xpath.
virtual bool is_jim(pod_index_type xmbr_hub_id, bool xin_current_version=true) const
True if the member with hub id xmbr_hub_id is a jim.
virtual schema_poset_member * new_schema_handle(const std::string &xid_space_name, pod_index_type xschema_member_ext_id, pod_index_type xbase_space_ext_id, pod_index_type xfiber_schema_ext_id, pod_index_type xlocal_schema_ext_id)
Creates a member handle of the type appropriate for members of this when used as a schema...
sec_rep_descriptor & rep()
The representation for section spaces on this schema.
static binary_section_space_schema_poset & new_table(namespace_type &xhost, const poset_path &xpath, const poset_path &xschema_path, const poset_path &xbase_path, const poset_path &xfiber_path, const poset_path &xrep_path, bool xauto_access)
Creates a new binary_section_space_schema_poset in namespace xns with path xpath, schema specified by...
virtual void initialize_handle_data_members(const namespace_poset &xns)
Initializes the handle data members that depend on the table dofs and are required to get access when...
virtual void merge_jems(pod_index_type xjem1, pod_index_type xjem2)
Merge the join-equivalence class of xjem2 under that of xjem1.
bool empty() const
True if both poset name and member name are empty.
Definition: poset_path.cc:291
void disable_invariant_check() const
Disable invariant check. Intended for preventing recursive calls to invariant and for suppressing inv...
Definition: any.h:97
virtual void release_access(bool xall=false) const
Release access. If xall is true, release all levels of access. Otherwise, release one level of access...
virtual pod_index_type get_fiber_schema_id_from_index(pod_index_type xmbr_hub_id) const
Computes the fiber schema member id associated with hub id xmbr_hub_id.
int base_space_stride() const
The increment in the member id when the id of the base space component is increased by one...
const bool LOWER
Selector for lower cover.
Definition: sheaf.h:67
static poset_handle_factory & factory()
The poset handle factory.
static const poset_path & standard_schema_path()
The path of the schema required by this class.
virtual bool is_ancestor_of(const any *other) const
True if other conforms to this.
virtual bool is_attached() const
True if this is attached to a state.
virtual bool contains_member(pod_index_type xmbr_hub_id, bool xauto_access=true) const
True if some version of this poset contains poset member with hub id xmbr_hub_id. ...
section_space_schema_member & bottom()
The bottom of member of the lattice (mutable version)
poset_state * _state
State object for this poset.
An abstract schema poset for a section space. A Cartesian product subspace of the tensor product of a...
virtual void put_dof(pod_index_type xdof_id, const void *xdof, size_type xdof_size)
Sets the dof referred to by xdof_id to the value at xdof.
bool invariant_check() const
True if invariant checking is enabled.
Definition: any.h:79
virtual pod_index_type greatest_jem(pod_index_type xmbr_hub_id) const
The hub id of the largest member which is join-equivalent to hub id xmbr_hub_id.
virtual void release_access(bool xall=false) const
Release access. If xall is true, release all levels of access. Otherwise, release one level of access...
poset_state_handle & fiber_schema()
The fiber schema for section spaces on this schema (mutable version).
binary_section_space_schema_poset()
Default constructor; creates a new binary_section_space_schema_poset handle not attached to any state...
static bool make_prototype()
Creates prototype for this class and enters in in factory.
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
virtual bool contains_link(pod_index_type xgreater, pod_index_type xlesser) const
True if there is a cover link between hub id xlesser and hub id xgreater.
virtual void new_state(const poset_path &xpath, const schema_poset_member &xschema, array_poset_dof_map &xdof_map)
Creates a new poset state with path xpath, schema xschema and table dof map xdof_map, attaches this to the state.
virtual poset_type type_id() const
Identifier for the type of this poset.
bool is_same_state(const poset_state_handle *xother) const
True if this is attached to the same state as xother.
virtual pod_index_type least_jem(pod_index_type xmbr_hub_id) const
The hub id of the smallest member which is join-equivalent to hub id xmbr_hub_id. ...
void attach_to_state(const namespace_poset *xns, const poset_path &xpath, bool xauto_access=true)
Attach to the state specified by path xpath in the namespace xns.
bool cover_is_equal(bool xlower, pod_index_type xmbr_hub_id, pod_index_type xother_mbr_hub_id) const
True if and only if the lower (xlower true) or upper (xlower false) cover set of the member with hub ...
virtual pod_index_type least_jem(pod_index_type xhub_id) const
The index of the smallest member which is join-equivalent to hub id xhub_id.
virtual bool leqv(pod_index_type xgreater, pod_index_type xlesser) const
True if hub id xlesser is less than or equivalent to hub id xgreater.
virtual pod_index_type get_index_from_components(pod_index_type xbase_space_id, pod_index_type xfiber_schema_id) const
Computes the index associated with component ids xbase_space_id, xfiber_schema_id, and xlocal_schema_id.
bool in_jim_edit_mode() const
True if editing jims and jim order relation is allowed.
virtual void initialize_standard_members()
Creates the members common to every poset (i.e. _top and _bottom).
An array representation of abstract class poset_dof_map.
Namespace for the fiber_bundles component of the sheaf system.
void enable_invariant_check() const
Enable invariant checking.
Definition: any.h:87
virtual bool is_jem(pod_index_type xhub_id, pod_index_type xother) const
True if xother is join equivalent to hub id xhub_id.
bool state_is_not_read_accessible() const
True if this is attached and if the state is accessible for read or if access control is disabled...
A client handle for a poset member which has been prepared for use as a schema.
virtual bool schema_is_ancestor_of(const schema_poset_member *xother_schema) const
True if xother_schema conforms to the type of schema required by this.
base_space_poset & base_space()
The base space for section spaces on this schema.
virtual array_poset_dof_map & table_dof_map(bool xrequire_write_access=false)
The map from table dof client_ids to table dof values for this poset (mutable version) ...