MOOCHO (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
StandardCompositionRelationshipsPack.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
5 // Copyright (2003) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 #ifndef STANDARD_COMPOSITION_RELATIONSHIPS_PACK_H
43 #define STANDARD_COMPOSITION_RELATIONSHIPS_PACK_H
44 
45 #include "Moocho_ConfigDefs.hpp"
46 #include "Teuchos_Assert.hpp"
47 
48 namespace StandardCompositionRelationshipsPack {
49 
56 
58 class NoRefSet : public std::logic_error
59 {public: NoRefSet(const std::string& what_arg) : std::logic_error(what_arg) {}};
60 
61 // Throw a NoRefSet exception
62 inline void ThrowNoRefSet(const char func_name[], const char name[])
63 {
65  true,NoRefSet
66  ,func_name << ": The reference for \'" << name << "\' has not been set yet"
67  );
68 }
69 
71 template<class ContainedClass>
72 inline void assert_role_name_set(const ContainedClass* role_name_, const char func_name[]
73  , const char name[])
74 {
75  if(!role_name_) ThrowNoRefSet(func_name, name);
76 }
77 
79 template<class ContainedClass>
80 inline void set_role_name(ContainedClass*& role_name_, bool& owns_role_name_, const char name[]
81  , ContainedClass* role_name, bool owns_role_name)
82 {
83  if(owns_role_name_ && role_name_ != role_name) delete role_name_;
84  role_name_ = role_name; owns_role_name_ = owns_role_name;
85 }
86 
88 template<class ContainedClass>
89 inline ContainedClass* get_role_name(ContainedClass* role_name_, bool owns_role_name_
90  , const char name[])
91 {
92  return role_name_;
93 }
94 
96 template<class ContainedClass>
97 inline void set_owns_role_name(ContainedClass*& role_name_, bool& owns_role_name_
98  , const char name[], bool owns_role_name)
99 {
100  assert_role_name_set(role_name_, "set_owns_role_name()", name);
101  owns_role_name_ = owns_role_name;
102 }
103 
105 template<class ContainedClass>
106 inline bool owns_role_name(ContainedClass* role_name_, bool owns_role_name_, const char name[])
107 {
108  assert_role_name_set(role_name_, "owns_role_name()", name);
109  return owns_role_name_;
110 }
111 
113 template<class ContainedClass>
114 inline ContainedClass& role_name(ContainedClass* role_name_, bool owns_role_name_, const char name[])
115 {
116  assert_role_name_set(role_name_, "role_name()", name);
117  return *role_name_;
118 }
119 
121 template<class ContainedClass>
122 inline const ContainedClass& role_name(const ContainedClass* role_name_, bool owns_role_name_, const char name[])
123 {
124  assert_role_name_set(role_name_, "role_name()", name);
125  return *role_name_;
126 }
127 
129 template<class ContainedClass>
130 inline const ContainedClass& const_role_name(const ContainedClass* role_name_, bool owns_role_name_, const char name[])
131 {
132  assert_role_name_set(role_name_, "role_name()", name);
133  return *role_name_;
134 }
135 
136 
138 template<class ContainedClass>
139 inline void destory_container_obj(ContainedClass* role_name_, bool owns_role_name_)
140 {
141  if(owns_role_name_) delete role_name_;
142 }
143 
145 
146 } // end namespace StandardCompositionRelationshipsPack
147 
148 #endif // STANDARD_COMPOSITION_RELATIONSHIPS_PACK_H
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
bool owns_role_name(ContainedClass *role_name_, bool owns_role_name_, const char name[])
const ContainedClass & const_role_name(const ContainedClass *role_name_, bool owns_role_name_, const char name[])
ContainedClass * get_role_name(ContainedClass *role_name_, bool owns_role_name_, const char name[])
void destory_container_obj(ContainedClass *role_name_, bool owns_role_name_)
void set_owns_role_name(ContainedClass *&role_name_, bool &owns_role_name_, const char name[], bool owns_role_name)
void assert_role_name_set(const ContainedClass *role_name_, const char func_name[], const char name[])
Assert that the reference is set.
ContainedClass & role_name(ContainedClass *role_name_, bool owns_role_name_, const char name[])
void set_role_name(ContainedClass *&role_name_, bool &owns_role_name_, const char name[], ContainedClass *role_name, bool owns_role_name)
void ThrowNoRefSet(const char func_name[], const char name[])