SheafSystem  0.0.0.0
sec_t4.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/sec_t4.h"
22 
23 #include "SheafSystem/assert_contract.h"
24 #include "SheafSystem/binary_section_space_schema_member.impl.h"
25 #include "SheafSystem/binary_section_space_schema_poset.h"
26 #include "SheafSystem/fiber_bundles_namespace.h"
27 #include "SheafSystem/sec_at0.h"
28 #include "SheafSystem/sec_at0_space.h"
29 #include "SheafSystem/sec_tuple_space.impl.h"
30 #include "SheafSystem/section_space_schema_member.impl.h"
31 #include "SheafSystem/section_space_schema_poset.h"
32 #include "SheafSystem/tp.h"
33 #include "SheafSystem/tp_space.h"
34 
35 using namespace std;
36 using namespace fiber_bundle; // Workaround for MS C++ bug.
37 
38 //==============================================================================
39 // CLASS SEC_T4
40 //==============================================================================
41 
42 // ===========================================================
43 // HOST FACTORY FACET OF CLASS SEC_T4
44 // ===========================================================
45 
46 // PUBLIC MEMBER FUNCTIONS
47 
51  const poset_path& xhost_path,
52  const poset_path& xschema_path,
53  const poset_path& xscalar_space_path,
54  bool xauto_access)
55 {
56  // cout << endl << "Entering sec_t4::new_host." << endl;
57 
58  // Preconditions:
59 
60  require(xns.state_is_auto_read_write_accessible(xauto_access));
61 
62  require(!xhost_path.empty());
63  require(!xns.contains_path(xhost_path, xauto_access));
64 
65  require(xschema_path.full());
66  require(xns.path_is_auto_read_accessible<schema_type::host_type>(xschema_path, xauto_access));
67  require(host_type::fiber_space_conforms<fiber_type::host_type>(xns, xschema_path, xauto_access));
68 
69  require(xns.path_is_auto_read_accessible<scalar_type::host_type>(xscalar_space_path, xauto_access));
70 
71  require(host_type::same_scalar_fiber_space(xns, xschema_path, xscalar_space_path, xauto_access));
72 
73  // Body:
74 
75  host_type& result = host_type::new_table(xns, xhost_path, xschema_path, xscalar_space_path, xauto_access);
76 
77  // Postconditions:
78 
79  ensure(xns.owns(result, xauto_access));
80  ensure(result.path(true) == xhost_path);
81  ensure(result.state_is_not_read_accessible());
82  ensure(result.schema(true).path(xauto_access) == xschema_path);
83 
84  ensure(result.factor_ct(true) == result.schema(true).fiber_space<fiber_type::host_type>().factor_ct(xauto_access));
85  ensure(result.d(true) == result.schema(true).fiber_space<fiber_type::host_type>().d(xauto_access));
86  ensure(result.d(true) == result.dd(true));
87  ensure(result.scalar_space_path(true) == xscalar_space_path);
88  ensure(result.p(true) == result.schema(true).fiber_space<fiber_type::host_type>().p(xauto_access));
89  ensure(result.p(true) == 4);
90  ensure(result.dd(true) == result.schema(true).fiber_space<fiber_type::host_type>().dd(xauto_access));
91  ensure(result.vector_space_path(true) == xhost_path);
92 
93  // Exit:
94 
95  // cout << "Leaving sec_t4::new_host." << endl;
96  return result;
97 }
98 
99 // PROTECTED MEMBER FUNCTIONS
100 
101 // PRIVATE MEMBER FUNCTIONS
102 
103 
104 //==============================================================================
105 // T4 FACET OF CLASS SEC_T4
106 //==============================================================================
107 
108 // PUBLIC MEMBER FUNCTIONS
109 
112 {
113  // Preconditions:
114 
115  // Body:
116 
117  // Postconditions:
118 
119  ensure(invariant());
120 }
121 
123 sec_t4(const sec_rep_space* xhost, pod_index_type xhub_id)
124 {
125  // Preconditions:
126 
127  require(xhost != 0);
128  require(xhost->state_is_read_accessible());
129  require(xhost->contains_member(xhub_id));
130 
131  // Body:
132 
133  attach_to_state(xhost, xhub_id);
134 
135  // Postconditions:
136 
137  ensure(invariant());
138  //ensure(host() == xhost);
139  ensure(index() == xhub_id);
140  ensure(is_attached());
141  ensure(!is_restricted());
142 }
143 
145 sec_t4(const sec_rep_space* xhost, const scoped_index& xid)
146 {
147  // Preconditions:
148 
149  require(xhost != 0);
150  require(xhost->state_is_read_accessible());
151  require(xhost->contains_member(xid));
152 
153  // Body:
154 
155  attach_to_state(xhost, xid.hub_pod());
156 
157  // Postconditions:
158 
159  ensure(invariant());
160  //ensure(host() == xhost);
161  ensure(index() ==~ xid);
162  ensure(is_attached());
163  ensure(!is_restricted());
164 }
165 
167 sec_t4(const sec_rep_space* xhost, const std::string& xname)
168 {
169 
170  // Preconditions:
171 
172  require(xhost != 0);
173  require(xhost->state_is_read_accessible());
174  require(!xname.empty());
175  require(xhost->contains_member(xname));
176 
177  // Body:
178 
179  attach_to_state(xhost, xname);
180 
181  // Postconditions:
182 
183  ensure(invariant());
184  //ensure(host() == xhost);
185  ensure(name() == xname);
186  ensure(is_attached());
187  ensure(!is_restricted());
188 
189 }
190 
191 
193 sec_t4(const namespace_poset* xnamespace,
194  const poset_path& xpath,
195  bool xauto_access)
196 {
197 
198  // Preconditions:
199 
200  require(precondition_of(attach_to_state(same args)));
201 
202  // Body:
203 
204  attach_to_state(xnamespace, xpath, xauto_access);
205 
206  // Postconditions:
207 
208  ensure(postcondition_of(attach_to_state(same args)));
209 
210  // Exit:
211 
212  return;
213 }
214 
215 
218 {
219 
220  // Preconditions:
221 
222  require(xother != 0);
223 
224  // Body:
225 
226  attach_to_state(xother);
227 
228  // Postconditions:
229 
230  ensure(invariant());
231  ensure(is_attached());
232  ensure(is_same_state(xother));
233  ensure(is_same_restriction(xother));
234 
235 }
236 
238 sec_t4(sec_rep_space* xhost, section_dof_map* xdof_map, bool xauto_access)
239 {
240 
241  // Preconditions:
242 
243  require(precondition_of(new_jim_state(xhost, xdof_map, false, xauto_access)));
244 
245  // Body:
246 
247  new_jim_state(xhost, xdof_map, false, xauto_access);
248 
249  // Postconditions:
250 
251  ensure(postcondition_of(new_jim_state(xhost, xdof_map, false, xauto_access)));
252 
253  // Exit:
254 
255  return;
256 }
257 
260  abstract_poset_member& xbase_mbr,
261  int xbase_version, bool xauto_access)
262 {
263 
264  // Preconditions:
265 
266  require(precondition_of(new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access)));
267 
268  // Body:
269 
270  new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access);
271 
272  // Postconditions:
273 
274  ensure(postcondition_of(new_jim_state(xhost, xbase_mbr, xbase_version, xauto_access)));
275 
276  // Exit:
277 
278  return;
279 }
280 
284 {
285  // Preconditions:
286 
287  require(is_ancestor_of(&xother));
288  require(precondition_of(attach_to_state(&xother)));
289 
290  // Body:
291 
292  attach_to_state(&xother);
293 
294  // Postconditions:
295 
296  ensure(postcondition_of(attach_to_state(&xother)));
297 
298  // Exit:
299 
300  return *this;
301 }
302 
305 operator=(const sec_t4& xother)
306 {
307  // Preconditions:
308 
309  require(precondition_of(attach_to_state(&xother)));
310 
311  // Body:
312 
313  attach_to_state(&xother);
314 
315  // Postconditions:
316 
317  ensure(postcondition_of(attach_to_state(&xother)));
318 
319  // Exit:
320 
321  return *this;
322 }
323 
326 operator=(const t4& xfiber)
327 {
328  // Preconditions:
329 
330  require(precondition_of(sec_vd::operator=(xfiber)));
331 
332  // Body:
333 
334  sec_vd::operator=(xfiber);
335 
336  // Postconditions:
337 
338  ensure(postcondition_of(sec_vd::operator=(xfiber)));
339 
340  // Exit:
341 
342  return *this;
343 }
344 
347 operator=(const t4_lite& xfiber)
348 {
349  // Preconditions:
350 
351  require(precondition_of(sec_vd::operator=(xfiber)));
352 
353  // Body:
354 
355  sec_vd::operator=(xfiber);
356 
357  // Postconditions:
358 
359  ensure(postcondition_of(sec_vd::operator=(xfiber)));
360 
361  // Exit:
362 
363  return *this;
364 }
365 
368 {
369  // Preconditions:
370 
371  // Body:
372 
373  // Postconditions:
374 
375 }
376 
380 {
381  // Preconditions:
382 
383  // Body:
384 
385  static const fiber_type result;
386 
387  // Postconditions:
388 
389  // Exit:
390 
391  return result;
392 }
393 
394 // PROTECTED MEMBER FUNCTIONS
395 
396 // PRIVATE MEMBER FUNCTIONS
397 
398 
399 //==============================================================================
400 // STP FACET OF CLASS SEC_T4
401 //==============================================================================
402 
403 // PUBLIC MEMBER FUNCTIONS
404 
405 // PROTECTED MEMBER FUNCTIONS
406 
407 // PRIVATE MEMBER FUNCTIONS
408 
409 
410 //==============================================================================
411 // TP FACET OF CLASS SEC_T4
412 //==============================================================================
413 
414 // PUBLIC MEMBER FUNCTIONS
415 
416 // PROTECTED MEMBER FUNCTIONS
417 
418 // PRIVATE MEMBER FUNCTIONS
419 
420 
421 //==============================================================================
422 // VD FACET OF CLASS SEC_T4
423 //==============================================================================
424 
425 // PUBLIC MEMBER FUNCTIONS
426 
427 // PROTECTED MEMBER FUNCTIONS
428 
429 // PRIVATE MEMBER FUNCTIONS
430 
431 
432 //==============================================================================
433 // TUPLE FACET OF CLASS SEC_T4
434 //==============================================================================
435 
436 // PUBLIC MEMBER FUNCTIONS
437 
438 // PROTECTED MEMBER FUNCTIONS
439 
440 // PRIVATE MEMBER FUNCTIONS
441 
442 
443 //==============================================================================
444 // ABSTRACT POSET MEMBER FACET OF CLASS SEC_T4
445 //==============================================================================
446 
447 // PUBLIC MEMBER FUNCTIONS
448 
449 const std::string&
451 class_name() const
452 {
453  // Preconditions:
454 
455  // Body:
456 
457  const string& result = static_class_name();
458 
459  // Postconditions:
460 
461  ensure(!result.empty());
462 
463  // Exit:
464 
465  return result;
466 }
467 
468 const std::string&
471 {
472  // Preconditions:
473 
474  // Body:
475 
476  static const string result("sec_t4");
477 
478  // Postconditions:
479 
480  ensure(!result.empty());
481 
482  // Exit:
483 
484  return result;
485 }
486 
489 clone() const
490 {
491 
492  // Preconditions:
493 
494  // Body:
495 
496  // Create new handle of the current class.
497 
498  sec_t4* result = new sec_t4();
499 
500  // Postconditions:
501 
502  ensure(result != 0);
503  ensure(result->invariant());
504 
505  // Exit:
506 
507  return result;
508 
509 }
510 
511 // PROTECTED MEMBER FUNCTIONS
512 
513 // PRIVATE MEMBER FUNCTIONS
514 
515 
516 //==============================================================================
517 // ANY FACET OF CLASS SEC_T4
518 //==============================================================================
519 
520 // PUBLIC MEMBER FUNCTIONS
521 
522 bool
524 fiber_is_ancestor_of(const any* xother) const
525 {
526 
527  // Preconditions:
528 
529  require(xother != 0);
530 
531  // Body:
532 
533  // If xother may be dynamically cast to the type of this fiber then this
534  // fiber is an ancestor of xother.
535 
536  bool result = dynamic_cast<const t4*>(xother) != 0;
537 
538  // Postconditions:
539 
540  ensure(invariant());
541  ensure(xother->invariant());
542 
543  // Exit:
544 
545  return result;
546 
547 }
548 
549 bool
551 is_ancestor_of(const any* xother) const
552 {
553  // Preconditions:
554 
555  require(xother != 0);
556 
557  // Body:
558 
559  // If other may be dynamically cast to the type of this then this is an
560  // ancestor of other.
561 
562  bool result = dynamic_cast<const sec_t4*>(xother) != 0;
563 
564  // Postconditions:
565 
566  //ensure(invariant());
567 
568  // Exit:
569 
570  return result;
571 
572 }
573 
574 bool
576 invariant() const
577 {
578  bool result = true;
579 
580  // Preconditions:
581 
582  // Body:
583 
584  // Must satisfy base class invariant
585 
586  invariance(sec_tp::invariant());
587 
588  if (invariant_check())
589  {
590  // Prevent recursive calls to invariant
591 
592  disable_invariant_check();
593 
594  invariance(is_attached() ? p() == 4 : true);
595 
596  // Finished, turn invariant checking back on.
597 
598  enable_invariant_check();
599  }
600 
601  // Postconditions:
602 
603  ensure(is_derived_query);
604 
605  // Exit:
606 
607  return result;
608 }
609 
610 // PROTECTED MEMBER FUNCTIONS
611 
612 // PRIVATE MEMBER FUNCTIONS
613 
virtual bool invariant() const
Class invariant, intended to be redefined in each descendant. See below for template for invariant in...
Definition: any.cc:153
static int factor_ct(int xd)
Factor_ct() as a function of dimension xd.
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 full() const
True if both poset name and member name are not empty.
Definition: poset_path.cc:311
A Cartesian product section space.
The abstract map from section dof ids to section dof values of heterogeneous type.
poset_path path(bool xauto_access=true) const
A path to this component.
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...
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
A member of a sec_rep_space; a section.
poset_path vector_space_path() const
The path of the underlying vector space.
STL namespace.
sec_t4()
Default constructor.
Definition: sec_t4.cc:111
A schema poset for a section space. A binary Cartesian product subspace of the binary tensor product ...
static host_type & new_host(namespace_type &xns, const poset_path &xhost_path, const poset_path &xschema_path, const poset_path &xscalar_space_path, bool xauto_access)
Creates a new host table for members of this type. The poset is created in namespace xns with path xh...
Definition: sec_t4.cc:50
Abstract base class with useful features for all objects.
Definition: any.h:39
int p() const
The tensor degree of this space.
virtual section_space_schema_member & schema()
The schema for this poset (mutable version)
An abstract tensor section space of degree p.
Definition: sec_tp_space.h:53
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
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 sec_t4 * clone() const
Make a new handle, no state instance of current.
Definition: sec_t4.cc:489
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. ...
A section of a bundle with fiber type t4.
Definition: sec_t4.h:46
virtual const fiber_type & fiber_prototype() const
Virtual constructor for the associated fiber type.
Definition: sec_t4.cc:379
int dd() const
The dimension of the underlying ("domain") vector space.
bool empty() const
True if both poset name and member name are empty.
Definition: poset_path.cc:291
bool fiber_is_ancestor_of(const any *xother) const
True if xother conforms to an instance of the fiber of current.
Definition: sec_t4.cc:524
bool invariant() const
Class invariant.
Definition: sec_t4.cc:576
A tensor of degree 4 over an abstract vector space (volatile version).
Definition: t4.h:43
int_type pod_index_type
The plain old data index type.
Definition: pod_types.h:49
poset_path scalar_space_path() const
The path of the underlying space of scalars.
poset & fiber_space()
The fiber space for section spaces on this schema (mutable version).
virtual sec_t4 & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
Definition: sec_t4.cc:283
virtual const std::string & class_name() const
The name of this class.
Definition: sec_t4.cc:451
virtual int d(int xp, int xdd) const
Dimension d() as a function of degree xp and domain dimension xdd.
static const std::string & static_class_name()
The name of this class.
Definition: sec_t4.cc:470
~sec_t4()
Destructor.
Definition: sec_t4.cc:367
bool is_ancestor_of(const any *xother) const
True if xother conforms to current.
Definition: sec_t4.cc:551
An abstract client handle for a member of a poset.
An abstract tensor space of degree p.
Definition: tp_space.h:47
Namespace for the fiber_bundles component of the sheaf system.
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 tensor of degree 4 over an abstract vector space (persistent version).
Definition: t4.h:223
pod_type hub_pod() const
The pod value of this mapped to the unglued hub id space.
Definition: scoped_index.h:710
A handle for a poset whose members are numerical representations of sections of a fiber bundle...
Definition: sec_rep_space.h:61