CCF
Loading...
Searching...
No Matches
value.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
5#include "ccf/kv/get_name.h"
6#include "ccf/kv/hooks.h"
9#include "ccf/kv/untyped.h"
10#include "ccf/kv/value_handle.h"
11
12namespace ccf::kv
13{
27 template <
28 typename V,
29 typename VSerialiser,
31 class TypedValue : public GetName
32 {
33 public:
37
38 using Write = std::optional<V>;
41
42 using Value = V;
43 using ValueSerialiser = VSerialiser;
44
45 using GetName::GetName;
46
48 {
49 return Unit::get();
50 }
51
52 private:
53 static Write deserialise_write(const ccf::kv::untyped::Write& w)
54 {
55 assert(w.size() == 1); // Value contains only one element
56 const auto& value = w.begin()->second;
57 if (!value.has_value())
58 {
59 return std::nullopt;
60 }
61 return VSerialiser::from_serialised(value.value());
62 }
63
64 public:
66 {
67 return [hook](Version v, const ccf::kv::untyped::Write& w) {
68 hook(v, deserialise_write(w));
69 };
70 }
71
73 {
74 return [hook](Version v, const ccf::kv::untyped::Write& w) {
75 return hook(v, deserialise_write(w));
76 };
77 }
78 };
79
80 template <
81 typename V,
82 template <typename>
83 typename VSerialiser,
86
87 template <typename V>
90
91 template <typename V>
94
98 template <typename V>
100}
Definition value_handle.h:14
Definition value.h:32
static ccf::kv::untyped::CommitHook wrap_commit_hook(const CommitHook &hook)
Definition value.h:65
MapHook< Write > MapHook
Definition value.h:39
VSerialiser ValueSerialiser
Definition value.h:43
static ccf::kv::untyped::MapHook wrap_map_hook(const MapHook &hook)
Definition value.h:72
V Value
Definition value.h:42
std::optional< V > Write
Definition value.h:38
CommitHook< Write > CommitHook
Definition value.h:40
static ccf::kv::serialisers::SerialisedEntry create_unit()
Definition value.h:47
Definition value_handle.h:129
Definition value_handle.h:91
ccf::ByteVector SerialisedEntry
Definition serialised_entry.h:8
ccf::kv::CommitHook< Write > CommitHook
Definition untyped.h:18
std::map< ccf::kv::serialisers::SerialisedEntry, std::optional< ccf::kv::serialisers::SerialisedEntry > > Write
Definition untyped.h:16
ccf::kv::MapHook< Write > MapHook
Definition untyped.h:19
SerialisedEntry V
Definition untyped_change_set.h:23
Definition app_interface.h:19
uint64_t Version
Definition version.h:8
Definition get_name.h:10
GetName(const std::string &s)
Definition get_name.h:15