OmniSciDB  b24e664e58
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
NullableValue.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 MapD Technologies, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /*
18  * @file NullableValue.h
19  * @author Dmitri Shtilman <d@mapd.com>
20  *
21  * Copyright (c) 2016 MapD Technologies, Inc. All rights reserved.
22  */
23 
24 #ifndef NULLABLEVALUE_H
25 #define NULLABLEVALUE_H
26 
27 template <typename T>
29  public:
32 
33  bool isValid() const { return state_ == Valid; }
34  bool isInvalid() const { return state_ == Invalid; }
35  T getValue() const { return value_; }
36 
38  if (isInvalid()) {
39  return NullableValue<T>();
40  }
41  return NullableValue<T>(value_ + v);
42  }
44  if (isInvalid()) {
45  return NullableValue<T>();
46  }
47  return NullableValue<T>(value_ - v);
48  }
50  if (isInvalid()) {
51  return NullableValue<T>();
52  }
53  return NullableValue<T>(value_ * v);
54  }
56  if (isInvalid()) {
57  return NullableValue<T>();
58  }
59  return NullableValue<T>(value_ / v);
60  }
62  if (isInvalid() && other.isInvalid()) {
63  return NullableValue<T>();
64  }
65  return NullableValue<T>(value_ + other.getValue());
66  }
68  if (isInvalid() && other.isInvalid()) {
69  return NullableValue<T>();
70  }
71  return NullableValue<T>(value_ - other.getValue());
72  }
74  if (isInvalid() && other.isInvalid()) {
75  return NullableValue<T>();
76  }
77  return NullableValue<T>(value_ * other.getValue());
78  }
80  if (isInvalid() && other.isInvalid()) {
81  return NullableValue<T>();
82  }
83  return NullableValue<T>(value_ / other.getValue());
84  }
85  bool operator==(const T v) const { return isValid() ? (value_ == v) : false; }
86  bool operator!=(const T v) const { return isValid() ? (value_ != v) : false; }
87  bool operator>(const T v) const { return isValid() ? (value_ > v) : false; }
88  bool operator>=(const T v) const { return isValid() ? (value_ >= v) : false; }
89  bool operator<(const T v) const { return isValid() ? (value_ < v) : false; }
90  bool operator<=(const T v) const { return isValid() ? (value_ <= v) : false; }
91 
92  static T getDefaultValue();
93 
94  private:
95  enum State { Invalid, Valid };
97  T value_;
98 };
99 
101 template <>
103  return 0.5;
104 };
105 
107 template <>
108 uint64_t Weight::getDefaultValue() {
109  return 1;
110 }
111 
112 #endif // NULLABLEVALUE_H
bool operator!=(const T v) const
Definition: NullableValue.h:86
static T getDefaultValue()
NullableValue< T > operator-(const NullableValue< T > &other) const
Definition: NullableValue.h:67
NullableValue< T > operator+(const NullableValue< T > &other) const
Definition: NullableValue.h:61
NullableValue< T > operator-(T v) const
Definition: NullableValue.h:43
bool isValid() const
Definition: NullableValue.h:33
bool operator>=(const T v) const
Definition: NullableValue.h:88
bool operator<(const T v) const
Definition: NullableValue.h:89
bool isInvalid() const
Definition: NullableValue.h:34
bool operator>(const T v) const
Definition: NullableValue.h:87
bool operator<=(const T v) const
Definition: NullableValue.h:90
T getValue() const
Definition: NullableValue.h:35
NullableValue< T > operator+(T v) const
Definition: NullableValue.h:37
NullableValue< T > operator*(const NullableValue< T > &other) const
Definition: NullableValue.h:73
NullableValue< T > operator/(T v) const
Definition: NullableValue.h:55
bool operator==(const T v) const
Definition: NullableValue.h:85
NullableValue< T > operator/(const NullableValue< T > &other) const
Definition: NullableValue.h:79
NullableValue< T > operator*(T v) const
Definition: NullableValue.h:49