xref: /aosp_15_r20/external/emboss/runtime/cpp/emboss_constant_view.h (revision 99e0aae7469b87d12f0ad23e61142c2d74c1ef70)
1*99e0aae7SDavid Rees // Copyright 2019 Google LLC
2*99e0aae7SDavid Rees //
3*99e0aae7SDavid Rees // Licensed under the Apache License, Version 2.0 (the "License");
4*99e0aae7SDavid Rees // you may not use this file except in compliance with the License.
5*99e0aae7SDavid Rees // You may obtain a copy of the License at
6*99e0aae7SDavid Rees //
7*99e0aae7SDavid Rees //     https://www.apache.org/licenses/LICENSE-2.0
8*99e0aae7SDavid Rees //
9*99e0aae7SDavid Rees // Unless required by applicable law or agreed to in writing, software
10*99e0aae7SDavid Rees // distributed under the License is distributed on an "AS IS" BASIS,
11*99e0aae7SDavid Rees // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*99e0aae7SDavid Rees // See the License for the specific language governing permissions and
13*99e0aae7SDavid Rees // limitations under the License.
14*99e0aae7SDavid Rees 
15*99e0aae7SDavid Rees #ifndef EMBOSS_RUNTIME_CPP_EMBOSS_CONSTANT_VIEW_H_
16*99e0aae7SDavid Rees #define EMBOSS_RUNTIME_CPP_EMBOSS_CONSTANT_VIEW_H_
17*99e0aae7SDavid Rees 
18*99e0aae7SDavid Rees #include "runtime/cpp/emboss_maybe.h"
19*99e0aae7SDavid Rees 
20*99e0aae7SDavid Rees namespace emboss {
21*99e0aae7SDavid Rees namespace support {
22*99e0aae7SDavid Rees 
23*99e0aae7SDavid Rees // MaybeConstantView is a "view" type that "reads" a value passed into its
24*99e0aae7SDavid Rees // constructor.
25*99e0aae7SDavid Rees //
26*99e0aae7SDavid Rees // This is used internally by generated structure view classes to provide views
27*99e0aae7SDavid Rees // of parameters; in this way, parameters can be treated like fields in the
28*99e0aae7SDavid Rees // generated code.
29*99e0aae7SDavid Rees template <typename ValueT>
30*99e0aae7SDavid Rees class MaybeConstantView {
31*99e0aae7SDavid Rees  public:
MaybeConstantView()32*99e0aae7SDavid Rees   MaybeConstantView() : value_() {}
MaybeConstantView(ValueT value)33*99e0aae7SDavid Rees   constexpr explicit MaybeConstantView(ValueT value) : value_(value) {}
34*99e0aae7SDavid Rees   MaybeConstantView(const MaybeConstantView &) = default;
35*99e0aae7SDavid Rees   MaybeConstantView(MaybeConstantView &&) = default;
36*99e0aae7SDavid Rees   MaybeConstantView &operator=(const MaybeConstantView &) = default;
37*99e0aae7SDavid Rees   MaybeConstantView &operator=(MaybeConstantView &&) = default;
38*99e0aae7SDavid Rees   ~MaybeConstantView() = default;
39*99e0aae7SDavid Rees 
Read()40*99e0aae7SDavid Rees   constexpr ValueT Read() const { return value_.Value(); }
UncheckedRead()41*99e0aae7SDavid Rees   constexpr ValueT UncheckedRead() const { return value_.ValueOrDefault(); }
Ok()42*99e0aae7SDavid Rees   constexpr bool Ok() const { return value_.Known(); }
43*99e0aae7SDavid Rees 
44*99e0aae7SDavid Rees  private:
45*99e0aae7SDavid Rees   ::emboss::support::Maybe<ValueT> value_;
46*99e0aae7SDavid Rees };
47*99e0aae7SDavid Rees 
48*99e0aae7SDavid Rees }  // namespace support
49*99e0aae7SDavid Rees }  // namespace emboss
50*99e0aae7SDavid Rees 
51*99e0aae7SDavid Rees #endif  // EMBOSS_RUNTIME_CPP_EMBOSS_CONSTANT_VIEW_H_
52