| // |
| // Copyright 2016 The Cobalt Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| $$ This is a pump file for generating the interface and implementation of |
| $$ optional's forwarding constructor and emplace() method. Pump is a python |
| $$ script that is part of the Google Test suite of utilities. Description |
| $$ can be found here: |
| $$ |
| $$ http://code.google.com/p/googletest/wiki/PumpManual |
| $$ |
| |
| $var MAX_ARITY = 7 |
| |
| $range ARITY 0..MAX_ARITY |
| |
| // clang-format off |
| // Begin forwarding constructor definitions //////////////////////////////////// |
| |
| $for ARITY [[ |
| |
| $range ARG 1..ARITY |
| |
| $if ARITY > 0 [[ |
| template <$for ARG , [[typename P$(ARG)]]> |
| |
| ]] |
| explicit optional(in_place_t$if ARITY > 0 [[, ]] |
| $for ARG , [[const P$(ARG)& p$(ARG)]]) { |
| InitializeAsDisengaged(); |
| new (void_value()) T($for ARG , [[p$(ARG)]]); |
| engaged_ = true; |
| #if !defined(NDEBUG) |
| value_ptr_ = static_cast<const T*>(void_value()); |
| #endif |
| } |
| |
| ]] |
| // End forwarding constructor definitions ////////////////////////////////////// |
| |
| // Begin emplace(...) definitions ////////////////////////////////////////////// |
| |
| $for ARITY [[ |
| |
| $range ARG 1..ARITY |
| |
| $if ARITY > 0 [[ |
| template <$for ARG , [[typename P$(ARG)]]> |
| |
| ]] |
| void emplace($for ARG , [[const P$(ARG)& p$(ARG)]]) { |
| EnsureDisengaged(); |
| new (void_value()) T($for ARG , [[p$(ARG)]]); |
| engaged_ = true; |
| #if !defined(NDEBUG) |
| value_ptr_ = static_cast<const T*>(void_value()); |
| #endif |
| } |
| |
| ]] |
| // End emplace(...) definitions //////////////////////////////////////////////// |
| // clang-format on |