Om
default_element.cpp
Go to the documentation of this file.
1 
15 #ifndef Om_Language_DefaultElement_
16 
18 
19 #else
20 
22 
23 // MARK: - Om::Language::DefaultElement
24 
25  #define Template_ \
26  template < \
27  typename ThisImplementation, \
28  typename ThisInterface \
29  >
30 
31  #define Type_ \
32  Om::Language::DefaultElement< \
33  ThisImplementation, \
34  ThisInterface \
35  >
36 
37 // MARK: public (non-static)
38 
39 Template_
40 inline Type_::~DefaultElement() {}
41 
42 Template_
43 inline bool Type_::Equals(Element const & theElement) const {
44  if (
45  typeid(theElement) == typeid(ThisImplementation)
46  ) {
47  assert(
48  dynamic_cast<ThisImplementation const *>(this) &&
49  dynamic_cast<ThisImplementation const *>(&theElement)
50  );
51  return static_cast<ThisImplementation const &>(*this).Equals(
52  static_cast<ThisImplementation const &>(theElement)
53  );
54  }
55  return (
56  this->IsEmpty() &&
57  theElement.IsEmpty()
58  );
59 }
60 
61 Template_
62 inline std::auto_ptr<
64 > Type_::GetElementRange() {
65  return std::auto_ptr<
67  >(
69  );
70 }
71 
72 Template_
73 inline std::auto_ptr<
75 > Type_::GetElementRange() const {
76  return std::auto_ptr<
78  >(
80  );
81 }
82 
83 Template_
84 inline void Type_::GiveElements(Consumer & theConsumer) {
85  assert(
86  dynamic_cast<ThisImplementation *>(this)
87  );
88  if (
89  !this->IsEmpty()
90  ) {
91  theConsumer.TakeElement(
92  static_cast<ThisImplementation &>(*this)
93  );
94  }
95 }
96 
97 Template_
98 inline void Type_::GiveElements(Consumer & theConsumer) const {
99  assert(
100  dynamic_cast<ThisImplementation const *>(this)
101  );
102  if (
103  !this->IsEmpty()
104  ) {
105  theConsumer.TakeElement(
106  static_cast<ThisImplementation const &>(*this)
107  );
108  }
109 }
110 
111  #undef Type_
112  #undef Template_
113 
114 #endif
Any object that items can be pulled from.
Definition: source.hpp:31
Om header file.
Om header file.