blob: c198c7a3f56089ef99bedbe2066e9bf64b58cfd4 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PERIDOT_BIN_LEDGER_SYNC_HELPER_MUTABLE_H_
#define PERIDOT_BIN_LEDGER_SYNC_HELPER_MUTABLE_H_
#include <utility>
namespace ledger {
// This class wraps a type A so that a const instance of Mutable<A> can still
// mutate the internal A object.
// It is used to capture a mutable variable in a non mutable lambda:
// [b = Mutable(false)] {
// *b = true;
// }
template <typename A>
class Mutable {
public:
explicit Mutable(A value) : value_(std::move(value)) {}
Mutable(Mutable&&) = default;
Mutable<A>& operator=(Mutable&&) = default;
A& operator*() const { return value_; }
A* operator->() const { return &value_; }
private:
mutable A value_;
};
} // namespace ledger
#endif // PERIDOT_BIN_LEDGER_SYNC_HELPER_MUTABLE_H_