SheafSystem  0.0.0.0
point_block_1d.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/point_block_1d.h"
22 
23 #include "SheafSystem/assert_contract.h"
24 #include "SheafSystem/arg_list.h"
25 //#include "SheafSystem/base_space_member_prototype.h"
26 #include "SheafSystem/chart_point_3d.h"
27 #include "SheafSystem/fiber_bundles_namespace.h"
28 #include "SheafSystem/namespace_poset.h"
29 #include "SheafSystem/point_block_crg_interval.h"
30 #include "SheafSystem/poset_path.h"
31 #include "SheafSystem/preorder_iterator.h"
32 #include "SheafSystem/tern.h"
33 #include "SheafSystem/wsv_block.h"
34 
35 using namespace fiber_bundle; // Workaround for MS C++ bug.
36 
37 // ===========================================================
38 // HOST FACTORY FACET
39 // ===========================================================
40 
41 // PUBLIC DATA MEMBERS
42 
43 const sheaf::poset_path&
46 {
47 
48  // Preconditions:
49 
50  // Body:
51 
52  static const poset_path
53  result(base_space_member::prototypes_poset_name(), "point_block_1d");
54 
55  // Postconditions:
56 
58  ensure(result.member_name() == "point_block_1d");
59 
60  // Exit
61 
62  return result;
63 }
64 
67 new_host(namespace_type& xns, const poset_path& xhost_path, const poset_path& xschema_path, bool xauto_access)
68 {
69  // cout << endl << "Entering point_block_1d::new_host." << endl;
70 
71  // Preconditions:
72 
73  require(xns.state_is_auto_read_write_accessible(xauto_access));
74 
75  require(!xhost_path.empty());
76  require(!xns.contains_path(xhost_path, xauto_access));
77 
78  require(xschema_path.full());
79  require(xns.path_is_auto_read_accessible(xschema_path, xauto_access));
80  require(schema_poset_member::conforms_to(xns, xschema_path, standard_schema_path(), xauto_access));
81 
82  // Body:
83 
84  host_type& result =
85  host_type::new_table(xns, xhost_path, xschema_path, 0, xauto_access);
86 
87  // Postconditions:
88 
89  ensure(xns.owns(result, xauto_access));
90  ensure(result.path(true) == xhost_path);
91  ensure(result.state_is_not_read_accessible());
92  ensure(result.schema(true).path(xauto_access) == xschema_path);
93 
94  ensure(result.max_db() == 0);
95 
96  // Exit:
97 
98  // cout << "Leaving point_block_1d::new_host." << endl;
99  return result;
100 }
101 
104 standard_host(namespace_type& xns, const poset_path& xhost_path, bool xauto_access)
105 {
106  // cout << endl << "Entering point_block_1d::standard_host." << endl;
107 
108  // Preconditions:
109 
110  require(xns.state_is_auto_read_write_accessible(xauto_access));
111 
112  require(poset_path::is_valid_name(xhost_path.poset_name()));
113  require(xns.path_is_auto_read_write_available<host_type>(xhost_path.poset_name(), xauto_access));
114 
115  require(xns.path_is_auto_read_accessible(standard_schema_path(), xauto_access));
116 
117  // Body:
118 
119  host_type* result_ptr;
120  if(xns.contains_path(xhost_path.poset_name(), xauto_access))
121  {
122  result_ptr = &xns.member_poset<host_type>(xhost_path, xauto_access);
123  }
124  else
125  {
126  result_ptr = &new_host(xns, xhost_path, standard_schema_path(), xauto_access);
127  }
128 
129  host_type& result = *result_ptr;
130 
131  // Postconditions:
132 
133  ensure(xns.owns(result, xauto_access));
134  ensure(result.path(true) == xhost_path);
135  ensure(result.state_is_not_read_accessible());
136  ensure(result.schema(true).path(xauto_access) == standard_schema_path());
137 
138  ensure(result.max_db() == 0);
139 
140  // Exit:
141 
142  // cout << "Leaving point_block_1d::standard_host." << endl;
143  return result;
144 }
145 
146 // PROTECTED DATA MEMBERS
147 
148 // PRIVATE DATA MEMBERS
149 
150 
151 // ===========================================================
152 // POINT_BLOCK_1D FACET
153 // ===========================================================
154 
155 // PUBLIC DATA MEMBERS
156 
159 {
160  // Preconditions:
161 
162  // Body:
163 
164  // Postconditions:
165 
166  ensure(invariant());
167  ensure(!is_attached());
168 }
169 
171 point_block_1d(const abstract_poset_member& xother, bool xnew_jem)
172 {
173  // Preconditions:
174 
175  require(xnew_jem ? xother.is_attached() : true);
176 
177  // Body:
178 
179  if(xnew_jem)
180  {
181  new_jem_state(const_cast<abstract_poset_member*>(&xother), true, true);
182  }
183  else
184  {
185  attach_to_state(&xother);
186  }
187 
188  // postconditions:
189 
190  ensure(invariant());
191  ensure(is_attached() == xother.is_attached() );
192 }
193 
196 {
197  // Preconditions:
198 
199  // Body:
200 
201  // Exit
202 
203  return;
204 }
205 
206 // NEW HANDLE, NEW STATE CONSTRUCTORS:
207 
209 point_block_1d(poset* xhost, const size_type& xi_size, bool xauto_access)
210 {
211  // Preconditions:
212 
213  require(precondition_of(new_state(same args)));
214 
215  // Body:
216 
217  new_state(xhost, xi_size, xauto_access);
218 
219  // Postconditions:
220 
221  ensure(postcondition_of(new_state(same args)));
222 
223  // Exit:
224 
225  return;
226 }
227 
228 // NEW HANDLE, EXISTING STATE CONSTRUCTORS:
229 
232 {
233  // Preconditions:
234 
235  require(precondition_of(attach_to_state(xhost, xhub_id)));
236 
237  // Body:
238 
239  attach_to_state(xhost, xhub_id);
240 
241  // Postconditions:
242 
243  ensure(postcondition_of(attach_to_state(xhost, xhub_id)));
244 }
245 
247 point_block_1d(poset* xhost, const scoped_index& xid)
248 {
249  // Preconditions:
250 
251  require(precondition_of(attach_to_state(xhost, xid)));
252 
253  // Body:
254 
255  attach_to_state(xhost, xid.hub_pod());
256 
257  // Postconditions:
258 
259  ensure(postcondition_of(attach_to_state(xhost, xid)));
260 }
261 
263 point_block_1d(const poset* xhost, const std::string& xname)
264 {
265  // Preconditions:
266 
267  require(precondition_of(attach_to_state(same args)));
268 
269  // Body:
270 
271  attach_to_state(xhost, xname);
272 
273  // Postconditions:
274 
275  ensure(postcondition_of(attach_to_state(same args)));
276 }
277 
279 point_block_1d(const namespace_poset* xnamespace,
280  const poset_path& xpath,
281  bool xauto_access)
282 {
283  // Preconditions:
284 
286 
287  require(precondition_of(attach_to_state(same args)));
288 
289  // Body:
290 
291  attach_to_state(xnamespace, xpath, xauto_access);
292 
293  // Postconditions:
294 
295  ensure(postcondition_of(attach_to_state(same args)));
296 
297  // Exit:
298 
299  return;
300 }
301 
303 point_block_1d(const namespace_poset* xnamespace,
304  pod_index_type xposet_id,
305  pod_index_type xmember_id)
306 {
307  // Preconditions:
308 
310 
311  require(precondition_of(attach_to_state(same args)));
312 
313  // Body:
314 
315  attach_to_state(xnamespace, xposet_id, xmember_id);
316 
317  // Postconditions:
318 
319  ensure(postcondition_of(attach_to_state(same args)));
320 
321  // Exit:
322 
323  return;
324 }
325 
327 point_block_1d(const namespace_poset* xnamespace,
328  const scoped_index& xposet_id,
329  const scoped_index& xmember_id)
330 {
331  // Preconditions:
332 
334 
335  require(precondition_of(attach_to_state(same args)));
336 
337  // Body:
338 
339  attach_to_state(xnamespace, xposet_id.hub_pod(), xmember_id.hub_pod());
340 
341  // Postconditions:
342 
343  ensure(postcondition_of(attach_to_state(same args)));
344 
345  // Exit:
346 
347  return;
348 }
349 
350 // EXISTING HANDLE, NEW STATE "CONSTRUCTORS":
351 
352 void
354 new_state(const size_type& xi_size, bool xauto_access)
355 {
356  // Preconditions:
357 
358  require(precondition_of(new_state(host(), xi_size, xauto_access)));
359 
360  // Body:
361 
362  new_state(host(), xi_size, xauto_access);
363 
364  // Postconditions:
365 
366  ensure(postcondition_of(new_state(host(), xi_size, xauto_access)));
367 
368  // Exit:
369 
370  return;
371 }
372 
373 void
375 new_state(poset* xhost, const size_type& xi_size, bool xauto_access)
376 {
377  // Preconditions:
378 
379  require(xhost != 0);
380  require(xauto_access ? xhost->is_attached() : xhost->in_jim_edit_mode());
381  require(xauto_access || xhost->name_space()->state_is_read_accessible());
382  require(xhost->name_space()->contains_poset_member(static_prototype_path(), true));
383  require(xauto_access || xhost->name_space()->member_poset(prototypes_poset_name(), true).state_is_read_accessible());
384 
385  // Get access if auto access is requested. Need to do it here so the
386  // remaining preconditions can be executed.
387 
388  if(xauto_access)
389  {
390  xhost->begin_jim_edit_mode(true);
391  xhost->name_space()->get_read_access();
392  xhost->name_space()->member_poset(prototypes_poset_name(), false).get_read_access();
393  }
394 
395  require(namespace_is_ancestor_of(xhost->name_space()));
396  require(xhost->schema().row_conforms_to(standard_schema_path()));
397 
399 
400  require(dynamic_cast<base_space_poset*>(xhost) != 0);
401 
402  require(xi_size > 0);
403 
404  // Body:
405 
406  // Get the size for the interval.
407 
408  size_type lsize;
409  point_block_crg_interval::get_size(xi_size, lsize);
410 
411  // Get the dof tuple_ids.
412 
413  block<pod_index_type> ldof_tuple_ids;
414  point_block_crg_interval::get_dof_tuple_ids(*xhost, xi_size, ldof_tuple_ids);
415 
416  // Get the private data for the interval
417 
418  block<pod_index_type> ldata;
420 
421  // Create the implicit crg interval for the block.
422 
423  pod_index_type lindex =
424  xhost->new_member_interval("point_block_crg_interval", lsize, ldof_tuple_ids, ldata);
425 
426  // Attach this handle to it.
427 
428  attach_to_state(xhost, lindex);
429 
430  // $$SCRIBBLE dmb:
431  // Update max_db in host
432 
433  base_space_poset* lhost = dynamic_cast<base_space_poset*>(xhost);
434  lhost->update_max_db(db());
435 
436  // Block is linked to bottom via implicit lower cover of vertices,
437  // but not linked to top; link it now.
438 
439  lhost->top().create_cover_link(this);
440 
441  // Postconditions:
442 
443  ensure(invariant());
444  ensure(host() == xhost);
445  ensure(is_attached());
446  ensure(db() == 0);
447  ensure(prototype_path() == static_prototype_path());
448  ensure(local_cell_type_name() ==
449  static_local_cell_prototype_path().member_name());
450  ensure(i_size() == xi_size);
451 
452  // Release access if auto access was requested.
453 
454  if(xauto_access)
455  {
456  xhost->name_space()->member_poset(prototypes_poset_name(), false).release_access();
457  xhost->name_space()->release_access();
458 
459  // End jim edit mode without ensure_lattice_invariant;
460  // the check is unnecessary and expensive.
461 
462  xhost->end_jim_edit_mode(false, true);
463  }
464 
465  // Exit:
466 
467  return;
468 }
469 
470 // FEATURES:
471 
472 const sheaf::size_type&
474 i_size() const
475 {
476  // Preconditions:
477 
478  require(state_is_read_accessible());
479 
480  // Body:
481 
482  point_block_1d* cthis = const_cast<point_block_1d*>(this);
483  const size_type& result = cthis->row_dof_tuple()->i_size;
484 
485  // Postconditions:
486 
487  // Exit
488 
489  return result;
490 }
491 
492 void
494 put_i_size(const size_type& xi_size)
495 {
496  // Preconditions:
497 
498  require(state_is_read_accessible());
499 
500  // Body:
501 
502  row_dof_tuple()->i_size = xi_size;
503 
504  // Postconditions:
505 
506  ensure(i_size() == xi_size);
507 
508  // Exit
509 
510  return;
511 }
512 
513 // PROTECTED DATA MEMBERS
514 
517 new_row_dof_map(poset_state_handle& xhost, size_type xi_size, bool xauto_access)
518 {
519  // Preconditions:
520 
521  require(xhost.state_is_auto_read_write_accessible(xauto_access));
522 
523  require(xauto_access || xhost.name_space()->poset_state_is_read_accessible(static_prototype_path()));
524  require(xhost.name_space()->contains_poset_member(static_prototype_path()));
525  require(xhost.name_space()->contains_poset_member(static_local_cell_prototype_path()));
526 
527  require(xi_size > 0);
528 
529  // Body:
530 
531  if(xauto_access)
532  {
533  xhost.get_read_write_access(true);
534  xhost.name_space()->get_read_access();
535  xhost.name_space()->member_poset(prototypes_poset_name(), false).get_read_access();
536  }
537 
538  // Calculate the number of cells.
539 
540  size_type lsize = xi_size;
541 
542  // Create the map and initialize inherited dofs.
543 
544  scoped_index result =
545  new_row_dof_map(xhost,
546  static_prototype_path().member_name(),
547  static_local_cell_prototype_path().member_name(),
548  lsize,
549  false);
550 
551  row_dof_tuple_type* ltuple =
552  reinterpret_cast<row_dof_tuple_type*>(xhost.row_dof_map(result, true).dof_tuple());
553 
554  // Set the size in the i direction.
555 
556  ltuple->i_size = xi_size;
557 
558  if(xauto_access)
559  {
560  xhost.name_space()->member_poset(prototypes_poset_name(), false).release_access();
561  xhost.name_space()->release_access();
562  xhost.release_access();
563  }
564 
565  // Postconditions:
566 
567 
568  // Exit:
569 
570  return result;
571 }
572 
573 // PRIVATE DATA MEMBERS
574 
575 
576 // ===========================================================
577 // HOMOGENEOUS_BLOCK FACET
578 // ===========================================================
579 
580 // PUBLIC DATA MEMBERS
581 
582 const sheaf::poset_path&
585 {
586 
587  // Preconditions:
588 
589  // Body:
590 
591  static const poset_path
592  result(base_space_member::prototypes_poset_name(), "point");
593 
594  // Postconditions:
595 
597  ensure(result.member_name() == "point");
598 
599  // Exit
600 
601  return result;
602 }
603 
604 // PROTECTED DATA MEMBERS
605 
606 // PRIVATE DATA MEMBERS
607 
608 
609 // ===========================================================
610 // BASE_SPACE_MEMBER FACET
611 // ===========================================================
612 
613 // PUBLIC DATA MEMBERS
614 
615 // PROTECTED DATA MEMBERS
616 
617 // PRIVATE DATA MEMBERS
618 
619 
620 // ===========================================================
621 // TOTAL_POSET_MEMBER FACET
622 // ===========================================================
623 
624 // PUBLIC DATA MEMBERS
625 
626 // PROTECTED DATA MEMBERS
627 
628 // PRIVATE DATA MEMBERS
629 
630 
631 // ===========================================================
632 // ABSTRACT_POSET_MEMBER FACET
633 // ===========================================================
634 
635 // PUBLIC DATA MEMBERS
636 
639 clone() const
640 {
641 
642  // Preconditions:
643 
644  // Body:
645 
646  // create new handle of the current class.
647 
648  point_block_1d *result = new point_block_1d();
649 
650  // Postconditions:
651 
652  ensure(result != 0);
653  ensure(result->invariant());
654 
655  // Exit:
656 
657  return result;
658 }
659 
660 // PROTECTED DATA MEMBERS
661 
662 // PRIVATE DATA MEMBERS
663 
664 
665 // ===========================================================
666 // ANY FACET
667 // ===========================================================
668 
669 // PUBLIC DATA MEMBERS
670 
671 bool
673 invariant() const
674 {
675  // Preconditions:
676 
677  // Body:
678 
679  // Must satisfy base class invariant
680 
681  invariance(total_poset_member::invariant());
682 
683  if(invariant_check())
684  {
685  // Prevent recursive calls to invariant
686 
687  disable_invariant_check();
688 
689  // Invariants for this class:
690 
691  invariance(state_is_read_accessible() ? is_jim(false) : true);
692  invariance(state_is_read_accessible() ? size() == i_size() : true);
693 
694  // Finished, turn invariant checking back on.
695 
696  enable_invariant_check();
697  }
698 
699  // Postconditions:
700 
701  // Exit
702 
703  return true;
704 }
705 
706 bool
708 is_ancestor_of(const any* xother) const
709 {
710  bool result;
711 
712  // Preconditions:
713 
714  // Body:
715 
716  result = dynamic_cast<const point_block_1d*>(xother) != 0;
717 
718  // Postconditions:
719 
720  // Exit
721 
722  return result;
723 }
724 
728 {
729  // Preconditions:
730 
731  // Body:
732 
733  attach_to_state(&xother);
734 
735  // Postconditions:
736 
737  ensure(is_same_state(&xother));
738 
739  // Exit
740 
741  return *this;
742 }
743 
746 operator=(const point_block_1d& xother)
747 {
748 
749  // Preconditions:
750 
751  require(is_ancestor_of(&xother));
752 
753  // Body
754 
755  not_implemented();
756 
757  // Postconditions
758 
759  ensure(invariant());
760 
761  // Exit
762 
763  return *this;
764 
765 }
766 
767 // PROTECTED DATA MEMBERS
768 
769 // PRIVATE DATA MEMBERS
770 
771 
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 bool invariant() const
Class invariant.
virtual poset_path path(bool xauto_access=true) const
The path of this poset.
bool state_is_auto_read_write_accessible(bool xauto_access) const
True if state is auto accessible for read and write, that is, if the state is already accessible for ...
bool path_is_auto_read_write_available(const poset_path &xpath, bool xauto_access) const
True if the state referred to xpath does not exist or exists and is auto read-write accessible...
virtual void create_cover_link(abstract_poset_member *xlesser)
Insert a link from this to lesser; make lesser <= this.
bool full() const
True if both poset name and member name are not empty.
Definition: poset_path.cc:311
abstract_poset_member & top()
The top member of the poset (mutable version)
static void get_dof_tuple_ids(poset_state_handle &xhost, size_type xi_size, block< pod_index_type > &result)
The dof tuple ids for an instance created with parameter xi_size.
poset_path path(bool xauto_access=true) const
A path to this component.
bool conforms_to(const schema_poset_member &xother) const
True if the dofs defined by this agree in type and in order with the dofs defined by xother...
The default name space; a poset which contains other posets as members.
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...
void update_max_db(int xmax_db)
Sets max_db() to the larger of old max_db() and xmax_db.
bool contains_poset_member(pod_index_type xposet_hub_id, pod_index_type xmember_hub_id, bool xauto_access=true) const
True if this contains a poset with hub id xposet_hub_id which contains a member with hub id xmember_h...
A client handle for a general, abstract partially order set.
virtual point_block_1d & operator=(const abstract_poset_member &xother)
Assignment operator; attaches this to the same state as xother.
point_block_1d()
Default constructor; creates a new, unattached point_block_1d handle.
virtual void * dof_tuple()=0
The dof tuple (mutable version).
static const poset_path & static_prototype_path()
The path of the prototype required by this class.
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
virtual point_block_1d * clone() const
Make a new handle, no state instance of current.
poset_state_handle & member_poset(pod_index_type xhub_id, bool xauto_access=true) const
The poset_state_handle object referred to by hub id xhub_id.
static void get_private_data(size_type xi_size, block< pod_index_type > &result)
The private data for an instance with parameter xi_size.
static const std::string & prototypes_poset_name()
The name of the prototypes poset.
static host_type & standard_host(namespace_type &xns, const poset_path &xhost_path, bool xauto_access)
The host with path xhost_path. Returns the host if it already exists, otherwise, creates it in namesp...
Abstract base class with useful features for all objects.
Definition: any.h:39
The lattice of closed cells of a cellular space; a lattice representation of a computational mesh...
virtual schema_poset_member & schema()
The schema for this poset (mutable version).
size_type i_size
The upper bound on the x direction index for structured blocks.
A client handle for a mutable partially ordered set.
Definition: poset.h:40
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)
An index within the external ("client") scope of a given id space.
Definition: scoped_index.h:116
virtual bool is_attached() const
True if this handle is attached to a non-void state.
virtual void get_read_access() const
Get read access to the state associated with this.
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.
const size_type & i_size() const
The number of vertices in this block;.
virtual bool invariant() const
Class invariant.
bool empty() const
True if both poset name and member name are empty.
Definition: poset_path.cc:291
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...
static host_type & new_host(namespace_type &xns, const poset_path &xhost_path, const poset_path &xschema_path, bool xauto_access)
Creates a new host poset for members of this type. The poset is created in namespace xns with path xh...
void put_i_size(const size_type &xi_size)
Sets i_size() to xi_size.
bool poset_state_is_read_accessible(const poset_path &xpath, bool xauto_access=true) const
True if the poset referred to by xpath is read accessible.
virtual poset_dof_map & row_dof_map(pod_index_type xtuple_hub_id, bool xrequire_write_access=false) const
The map from row dof client_ids to row dof values for dof tuple hub id xtuple_hub_id.
namespace_poset * name_space() const
The namespace this poset resides in.
virtual bool is_attached() const
True if this is attached to a state.
static void get_size(size_type xi_size, size_type &result)
The size for an instance created with parameters xi_size, xj_size, xk_size.
static const poset_path & static_local_cell_prototype_path()
The path of the local cell prototype required by this class.
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
std::string member_name() const
The member name part of the path.
Definition: poset_path.cc:511
static scoped_index new_row_dof_map(poset_state_handle &xhost, size_type xi_size, bool xauto_access)
Creates a new row dof map and initializes it.
virtual void end_jim_edit_mode(bool xensure_lattice_invariant=true, bool xauto_access=true)
Prevent editing of jims and jim order relation.
Definition: poset.cc:253
virtual pod_index_type new_member_interval(const std::string &xinterval_type, size_type xsize, const block< pod_index_type > &xtuple_hub_ids, const block< pod_index_type > &xdata)
Create a disconnected member interval of type xinterval_type with size xsize, dof tuple ids xtuple_hu...
A homogeneous collection of i_size() disconnected points; similar to a structured_block_1d, but without the segments.
static bool is_valid_name(const std::string &xname)
True if xname is not empty and contains only name legal characters.
Definition: poset_path.cc:331
virtual void get_read_access() const
Get read access to the state associated with this.
int max_db() const
The maximum dimension of the members of this base space.
An abstract client handle for a member of a poset.
bool row_conforms_to(const schema_poset_member &xother) const
True if the row dofs defined by this agree in type and in order with the dofs defined by xother...
virtual bool is_ancestor_of(const any *other) const
True if other conforms to this.
The type of row dof tuple for base_space_member.
bool in_jim_edit_mode() const
True if editing jims and jim order relation is allowed.
Namespace for the fiber_bundles component of the sheaf system.
virtual ~point_block_1d()
Destructor; deletes a poset member and its attached state, if any.
void new_state(const size_type &xi_size, bool xauto_access=true)
Creates a new point_block_1d state in host() with i_size() == xi_size and attaches this to it...
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...
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...
row_dof_tuple_type * row_dof_tuple(bool xrequire_write_access=false)
The row dof tuple for this.
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
Definition: scoped_index.h:710
virtual void begin_jim_edit_mode(bool xauto_access=true)
Allow editing of jims and jim order relation.
Definition: poset.cc:230