OTB  9.0.0
Orfeo Toolbox
otbNotNull.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2005-2022 Centre National d'Etudes Spatiales (CNES)
3  *
4  * This file is part of Orfeo Toolbox
5  *
6  * https://www.orfeo-toolbox.org/
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 #ifndef otbNotNull_h
22 #define otbNotNull_h
23 
24 #include <cstddef>
25 #include <cassert>
26 
27 namespace otb
28 {
36 template <typename T>
37 class NotNull
38 {
39 public:
40  constexpr NotNull(T p) : m_p(p) { assert(p); }
41  NotNull (std::nullptr_t) = delete;
42  NotNull& operator=(std::nullptr_t) = delete;
44 
45  constexpr T get() const
46  {
47  assert(m_p);
48  return m_p;
49  }
50 
51  constexpr operator T() const { return get(); }
52  constexpr T operator->() const { return get(); }
53  constexpr decltype(auto) operator*() const { return *get(); }
54 
55  // unwanted operators...pointers only point to single objects!
56  NotNull& operator++() = delete;
57  NotNull& operator--() = delete;
58  NotNull operator++(int) = delete;
59  NotNull operator--(int) = delete;
60  NotNull& operator+=(std::ptrdiff_t) = delete;
61  NotNull& operator-=(std::ptrdiff_t) = delete;
62  void operator[](std::ptrdiff_t) const = delete;
63 
64 private:
65  T m_p;
66 };
67 
68 } // otb namespace
69 
70 #endif // otbNotNull_h
otb::NotNull
Definition: otbNotNull.h:37
otb::NotNull::get
constexpr T get() const
Definition: otbNotNull.h:45
otb::NotNull::operator--
NotNull & operator--()=delete
otb::NotNull::operator-=
NotNull & operator-=(std::ptrdiff_t)=delete
otb
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.
Definition: otbJoinContainer.h:32
otb::NotNull::operator+=
NotNull & operator+=(std::ptrdiff_t)=delete
otb::NotNull::operator->
constexpr T operator->() const
Definition: otbNotNull.h:52
otb::NotNull::operator++
NotNull & operator++()=delete
otb::NotNull::NotNull
constexpr NotNull(T p)
Definition: otbNotNull.h:40
otb::NotNull::operator[]
void operator[](std::ptrdiff_t) const =delete
otb::NotNull::operator=
NotNull & operator=(std::nullptr_t)=delete
otb::NotNull::m_p
T m_p
Definition: otbNotNull.h:65