SheafSystem  0.0.0.0
sec_met_ed.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_met_ed.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_stp_space.h"
30 #include "SheafSystem/sec_tuple_space.impl.h"
31 #include "SheafSystem/section_space_schema_member.impl.h"
32 #include "SheafSystem/section_space_schema_poset.h"
33 #include "SheafSystem/stp.h"
34 #include "SheafSystem/stp_space.h"
35 
36 using namespace std;
37 using namespace fiber_bundle; // Workaround for MS C++ bug.
38 
39 //==============================================================================
40 // CLASS SEC_MET_ED
41 //==============================================================================
42 
43 // ===========================================================
44 // HOST FACTORY FACET OF CLASS SEC_MET
45 // ===========================================================
46 
47 // PUBLIC MEMBER FUNCTIONS
48 
52  const poset_path& xhost_path,
53  const poset_path& xschema_path,
54  const poset_path& xscalar_space_path,
55  bool xauto_access)
56 {
57  // cout << endl << "Entering sec_met_ed::new_host." << endl;
58 
59  // Preconditions:
60 
61  require(xns.state_is_auto_read_write_accessible(xauto_access));
62 
63  require(!xhost_path.empty());
64  require(!xns.contains_path(xhost_path, xauto_access));
65 
66  require(xschema_path.full());
67  require(xns.path_is_auto_read_accessible<schema_type::host_type>(xschema_path, xauto_access));
68  require(host_type::fiber_space_conforms<fiber_type::host_type>(xns, xschema_path, xauto_access));
69 
70  require(xns.path_is_auto_read_accessible<scalar_type::host_type>(xscalar_space_path, xauto_access));
71 
72  require(host_type::same_scalar_fiber_space(xns, xschema_path, xscalar_space_path, xauto_access));
73 
74  // Body:
75 
76  host_type& result = host_type::new_table(xns, xhost_path, xschema_path, xscalar_space_path, xauto_access);
77 
78  // Postconditions:
79 
80  ensure(xns.owns(result, xauto_access));
81  ensure(result.path(true) == xhost_path);
82  ensure(result.state_is_not_read_accessible());
83  ensure(result.schema(true).path(xauto_access) == xschema_path);
84 
85  ensure(result.factor_ct(true) == result.schema(true).fiber_space<fiber_type::host_type>().factor_ct(xauto_access));
86  ensure(result.d(true) == result.schema(true).fiber_space<fiber_type::host_type>().d(xauto_access));
87  ensure(result.d(true) == result.dd(true));
88  ensure(result.scalar_space_path(true) == xscalar_space_path);
89  ensure(result.p(true) == result.schema(true).fiber_space<fiber_type::host_type>().p(xauto_access));
90  ensure(result.p(true) == 2);
91  ensure(result.dd(true) == result.schema(true).fiber_space<fiber_type::host_type>().dd(xauto_access));
92  ensure(result.vector_space_path(true) == xhost_path);
93 
94  // Exit:
95 
96  // cout << "Leaving sec_met_ed::new_host." << endl;
97  return result;
98 }
99 
100 // PROTECTED MEMBER FUNCTIONS
101 
102 // PRIVATE MEMBER FUNCTIONS
103 
104 
105 //==============================================================================
106 // MET_ED FACET OF CLASS SEC_MET_ED
107 //==============================================================================
108 
109 // PUBLIC MEMBER FUNCTIONS
110 
113 {
114  // Preconditions:
115 
116  // Body:
117 
118  // Postconditions:
119 
120 }
121 
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_met_ed(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_met_ed(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_met_ed(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_met_ed(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 
261 {
262  // Preconditions:
263 
264  require(is_ancestor_of(&xother));
265  require(precondition_of(attach_to_state(&xother)));
266 
267  // Body:
268 
269  attach_to_state(&xother);
270 
271  // Postconditions:
272 
273  ensure(postcondition_of(attach_to_state(&xother)));
274 
275  // Exit:
276 
277  return *this;
278 }
279 
282 operator=(const sec_met_ed& xother)
283 {
284  // Preconditions:
285 
286  require(precondition_of(attach_to_state(&xother)));
287 
288  // Body:
289 
290  attach_to_state(&xother);
291 
292  // Postconditions:
293 
294  ensure(postcondition_of(attach_to_state(&xother)));
295 
296  // Exit:
297 
298  return *this;
299 }
300 
303 operator=(const met_ed& xfiber)
304 {
305  // Preconditions:
306 
307  require(precondition_of(sec_vd::operator=(xfiber)));
308 
309  // Body:
310 
311  sec_vd::operator=(xfiber);
312 
313  // Postconditions:
314 
315  ensure(postcondition_of(sec_vd::operator=(xfiber)));
316 
317  // Exit:
318 
319  return *this;
320 }
321 
324 operator=(const met_ed_lite& xfiber)
325 {
326  // Preconditions:
327 
328  require(precondition_of(sec_vd::operator=(xfiber)));
329 
330  // Body:
331 
332  sec_vd::operator=(xfiber);
333 
334  // Postconditions:
335 
336  ensure(postcondition_of(sec_vd::operator=(xfiber)));
337 
338  // Exit:
339 
340  return *this;
341 }
342 
345 {
346  // Preconditions:
347 
348  // Body:
349 
350  // Postconditions:
351 
352 }
353 
357 {
358  // Preconditions:
359 
360  // Body:
361 
362  static const fiber_type result;
363 
364  // Postconditions:
365 
366  // Exit:
367 
368  return result;
369 }
370 
371 // PROTECTED MEMBER FUNCTIONS
372 
373 // PRIVATE MEMBER FUNCTIONS
374 
375 
376 //==============================================================================
377 // MET FACET OF CLASS SEC_MET_ED
378 //==============================================================================
379 
380 // PUBLIC MEMBER FUNCTIONS
381 
382 // PROTECTED MEMBER FUNCTIONS
383 
384 // PRIVATE MEMBER FUNCTIONS
385 
386 
387 //==============================================================================
388 // ST2 FACET OF CLASS SEC_MET_ED
389 //==============================================================================
390 
391 // PUBLIC MEMBER FUNCTIONS
392 
393 // PROTECTED MEMBER FUNCTIONS
394 
395 // PRIVATE MEMBER FUNCTIONS
396 
397 
398 //==============================================================================
399 // STP FACET OF CLASS SEC_MET_ED
400 //==============================================================================
401 
402 // PUBLIC MEMBER FUNCTIONS
403 
404 // PROTECTED MEMBER FUNCTIONS
405 
406 // PRIVATE MEMBER FUNCTIONS
407 
408 
409 //==============================================================================
410 // TP FACET OF CLASS SEC_MET_ED
411 //==============================================================================
412 
413 // PUBLIC MEMBER FUNCTIONS
414 
415 // PROTECTED MEMBER FUNCTIONS
416 
417 // PRIVATE MEMBER FUNCTIONS
418 
419 
420 //==============================================================================
421 // VD FACET OF CLASS SEC_MET_ED
422 //==============================================================================
423 
424 // PUBLIC MEMBER FUNCTIONS
425 
426 // PROTECTED MEMBER FUNCTIONS
427 
428 // PRIVATE MEMBER FUNCTIONS
429 
430 
431 //==============================================================================
432 // TUPLE FACET OF CLASS SEC_MET_ED
433 //==============================================================================
434 
435 // PUBLIC MEMBER FUNCTIONS
436 
437 // PROTECTED MEMBER FUNCTIONS
438 
439 // PRIVATE MEMBER FUNCTIONS
440 
441 
442 //==============================================================================
443 // ABSTRACT POSET MEMBER FACET OF CLASS SEC_MET_ED
444 //==============================================================================
445 
446 // PUBLIC MEMBER FUNCTIONS
447 
448 const std::string&
450 class_name() const
451 {
452  // Preconditions:
453 
454  // Body:
455 
456  const string& result = static_class_name();
457 
458  // Postconditions:
459 
460  ensure(!result.empty());
461 
462  // Exit:
463 
464  return result;
465 }
466 
467 const std::string&
470 {
471  // Preconditions:
472 
473  // Body:
474 
475  static const string result("sec_met_ed");
476 
477  // Postconditions:
478 
479  ensure(!result.empty());
480 
481  // Exit:
482 
483  return result;
484 }
485 
488 clone() const
489 {
490 
491  // Preconditions:
492 
493  // Body:
494 
495  // Create new handle of the current class.
496 
497  sec_met_ed *result = new sec_met_ed();
498 
499  // Postconditions:
500 
501  ensure(result != 0);
502  ensure(result->invariant());
503 
504  // Exit:
505 
506  return result;
507 
508 }
509 
510 // PROTECTED MEMBER FUNCTIONS
511 
512 // PRIVATE MEMBER FUNCTIONS
513 
514 
515 //==============================================================================
516 // ANY FACET OF CLASS SEC_MET_ED
517 //==============================================================================
518 
519 // PUBLIC MEMBER FUNCTIONS
520 
521 bool
523 fiber_is_ancestor_of(const any* xother) const
524 {
525 
526  // Preconditions:
527 
528  require(xother != 0);
529 
530  // Body:
531 
532  // If xother may be dynamically cast to the type of this fiber then this
533  // fiber is an ancestor of xother.
534 
535  bool result = dynamic_cast<const met_ed*>(xother) != 0;
536 
537  // Postconditions:
538 
539  ensure(invariant());
540  ensure(xother->invariant());
541 
542  // Exit:
543 
544  return result;
545 
546 }
547 
548 bool
550 is_ancestor_of(const any* xother) const
551 {
552  // Preconditions:
553 
554  require(xother != 0);
555 
556  // Body:
557 
558  // If other may be dynamically cast to the type of this then this is an
559  // ancestor of other.
560 
561  bool result = dynamic_cast<const sec_met_ed*>(xother) != 0;
562 
563  // Postconditions:
564 
565  //ensure(invariant());
566 
567  // Exit:
568 
569  return result;
570 
571 }
572 
573 bool
575 invariant() const
576 {
577  bool result = true;
578 
579  // Preconditions:
580 
581  // Body:
582 
583  // Must satisfy base class invariant
584 
585  invariance(sec_met::invariant());
586 
587  if (invariant_check())
588  {
589  // Prevent recursive calls to invariant
590 
591  disable_invariant_check();
592 
593  // Finished, turn invariant checking back on.
594 
595  enable_invariant_check();
596  }
597 
598  // Postconditions:
599 
600  ensure(is_derived_query);
601 
602  return result;
603 
604 }
605 
606 // PROTECTED MEMBER FUNCTIONS
607 
608 // PRIVATE MEMBER FUNCTIONS
609 
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 ...
static const std::string & static_class_name()
The name of this class.
Definition: sec_met_ed.cc:469
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_met_ed.cc:51
bool invariant() const
Class invariant.
Definition: sec_met_ed.cc:575
An abstract symmetric tensor section space of degree p.
Definition: sec_stp_space.h:47
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 metric tensor over a d-dimensional Euclidean vector space (persistent version). ...
Definition: met_ed.h:215
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.
A schema poset for a section space. A binary Cartesian product subspace of the binary tensor product ...
A metric tensor over a d-dimensional Euclidean vector space (volatile version).
Definition: met_ed.h:43
A metric tensor over an abstract vector space (persistent version).
Definition: met.h:208
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)
virtual int d(int xp, int xdd) const
Dimension d() as a function of degree xp and domain dimension xdd.
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 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. ...
sec_met_ed()
Default constructor.
Definition: sec_met_ed.cc:112
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
virtual sec_met_ed & operator=(const abstract_poset_member &xother)
Assignment operator; synonym for attach_to_state(&xother).
Definition: sec_met_ed.cc:260
virtual sec_met_ed * clone() const
Make a new handle, no state instance of current.
Definition: sec_met_ed.cc:488
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 const std::string & class_name() const
The name of this class.
Definition: sec_met_ed.cc:450
bool fiber_is_ancestor_of(const any *xother) const
True if xother conforms to an instance of the fiber of current.
Definition: sec_met_ed.cc:523
bool is_ancestor_of(const any *xother) const
True if xother conforms to current.
Definition: sec_met_ed.cc:550
virtual const fiber_type & fiber_prototype() const
Virtual constructor for the associated fiber type.
Definition: sec_met_ed.cc:356
An abstract client handle for a member of a poset.
An abstract symmetric tensor space of degree p.
Definition: stp_space.h:42
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...
~sec_met_ed()
Destructor.
Definition: sec_met_ed.cc:344
A section of a bundle with fiber type met_ed.
Definition: sec_met_ed.h:46
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