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