renamed structs, methods and functions

fb-mini-snake
Claudius Holeksa 2023-01-07 23:52:07 +01:00
parent a83826552e
commit 4f10da77eb
15 changed files with 305 additions and 284 deletions

View File

@ -1,6 +1,9 @@
Checks: '-*,readability-identifier-naming'
CheckOptions:
- { key: readability-identifier-naming.PrivateMemberSuffix, value: "_" }
- { key: readability-identifier-naming.AggressiveDependentMemberLookup, value: true }
- { key: readability-identifier-naming.ProtectedMemberSuffix, value: "_" }
- { key: readability-identifier-naming.ClassCase, value: "lower_case" }
- { key: readability-identifier-naming.StructCase, value: "lower_case" }
- { key: readability-identifier-naming.FunctionCase, value: "lower_case" }
- { key: readability-identifier-naming.MethodCase, value: "lower_case" }

View File

@ -129,7 +129,7 @@ unix_datagram::unix_datagram(unix_event_port &event_port, int file_descriptor,
: i_fd_owner{event_port, file_descriptor, fd_flags, EPOLLIN | EPOLLOUT} {}
namespace {
ssize_t unixReadMsg(int fd, void *buffer, size_t length) {
ssize_t unix_read_msg(int fd, void *buffer, size_t length) {
struct ::sockaddr_storage their_addr;
socklen_t addr_len = sizeof(sockaddr_storage);
return ::recvfrom(fd, buffer, length, 0,
@ -137,15 +137,15 @@ ssize_t unixReadMsg(int fd, void *buffer, size_t length) {
&addr_len);
}
ssize_t unixWriteMsg(int fd, const void *buffer, size_t length,
::sockaddr *dest_addr, socklen_t dest_addr_len) {
ssize_t unix_write_msg(int fd, const void *buffer, size_t length,
::sockaddr *dest_addr, socklen_t dest_addr_len) {
return ::sendto(fd, buffer, length, 0, dest_addr, dest_addr_len);
}
} // namespace
error_or<size_t> unix_datagram::read(void *buffer, size_t length) {
ssize_t read_bytes = unixReadMsg(fd(), buffer, length);
ssize_t read_bytes = unix_read_msg(fd(), buffer, length);
if (read_bytes > 0) {
return static_cast<size_t>(read_bytes);
}
@ -163,8 +163,8 @@ error_or<size_t> unix_datagram::write(const void *buffer, size_t length,
unix_network_address &unix_dest = static_cast<unix_network_address &>(dest);
socket_address &sock_addr = unix_dest.unix_address();
socklen_t sock_addr_length = sock_addr.get_raw_length();
ssize_t write_bytes = unixWriteMsg(fd(), buffer, length,
sock_addr.get_raw(), sock_addr_length);
ssize_t write_bytes = unix_write_msg(fd(), buffer, length,
sock_addr.get_raw(), sock_addr_length);
if (write_bytes > 0) {
return static_cast<size_t>(write_bytes);
}
@ -192,14 +192,14 @@ void unix_datagram::notify(uint32_t mask) {
}
namespace {
bool beginsWith(const std::string_view &viewed,
const std::string_view &begins) {
bool begins_with(const std::string_view &viewed,
const std::string_view &begins) {
return viewed.size() >= begins.size() &&
viewed.compare(0, begins.size(), begins) == 0;
}
std::variant<unix_network_address, unix_network_address *>
translateNetworkAddressToUnixNetworkAddress(network_address &addr) {
translate_network_address_to_unix_network_address(network_address &addr) {
auto addr_variant = addr.representation();
std::variant<unix_network_address, unix_network_address *> os_addr =
std::visit(
@ -221,7 +221,7 @@ translateNetworkAddressToUnixNetworkAddress(network_address &addr) {
return os_addr;
}
unix_network_address &translateToUnixAddressRef(
unix_network_address &translate_to_unix_address_ref(
std::variant<unix_network_address, unix_network_address *> &addr_variant) {
return std::visit(
[](auto &arg) -> unix_network_address & {
@ -241,9 +241,10 @@ unix_network_address &translateToUnixAddressRef(
} // namespace
own<server> unix_network::listen(network_address &addr) {
auto unix_addr_storage = translateNetworkAddressToUnixNetworkAddress(addr);
auto unix_addr_storage =
translate_network_address_to_unix_network_address(addr);
unix_network_address &address =
translateToUnixAddressRef(unix_addr_storage);
translate_to_unix_address_ref(unix_addr_storage);
assert(address.unix_address_size() > 0);
if (address.unix_address_size() == 0) {
@ -274,9 +275,10 @@ own<server> unix_network::listen(network_address &addr) {
}
conveyor<own<io_stream>> unix_network::connect(network_address &addr) {
auto unix_addr_storage = translateNetworkAddressToUnixNetworkAddress(addr);
auto unix_addr_storage =
translate_network_address_to_unix_network_address(addr);
unix_network_address &address =
translateToUnixAddressRef(unix_addr_storage);
translate_to_unix_address_ref(unix_addr_storage);
assert(address.unix_address_size() > 0);
if (address.unix_address_size() == 0) {
@ -335,9 +337,10 @@ conveyor<own<io_stream>> unix_network::connect(network_address &addr) {
}
own<datagram> unix_network::datagram(network_address &addr) {
auto unix_addr_storage = translateNetworkAddressToUnixNetworkAddress(addr);
auto unix_addr_storage =
translate_network_address_to_unix_network_address(addr);
unix_network_address &address =
translateToUnixAddressRef(unix_addr_storage);
translate_to_unix_address_ref(unix_addr_storage);
SAW_ASSERT(address.unix_address_size() > 0) { return nullptr; }
@ -380,9 +383,9 @@ conveyor<own<network_address>>
unix_network::resolve_address(const std::string &path, uint16_t port_hint) {
std::string_view addr_view{path};
{
std::string_view begins_with = "unix:";
if (beginsWith(addr_view, begins_with)) {
addr_view.remove_prefix(begins_with.size());
std::string_view str_begins_with = "unix:";
if (begins_with(addr_view, str_begins_with)) {
addr_view.remove_prefix(str_begins_with.size());
}
}

View File

@ -291,7 +291,7 @@ template <typename Func> conveyor_result<Func, void> exec_later(Func &&func);
*/
template <typename... Args>
conveyor<std::tuple<Args...>>
joinConveyors(std::tuple<conveyor<Args>...> &conveyors);
join_conveyors(std::tuple<conveyor<Args>...> &conveyors);
template <typename T> class conveyor_feeder {
public:
@ -460,11 +460,11 @@ public:
void poll();
};
template <typename Func> conveyor_result<Func, void> yieldNext(Func &&func);
template <typename Func> conveyor_result<Func, void> yield_next(Func &&func);
template <typename Func> conveyor_result<Func, void> yieldLater(Func &&func);
template <typename Func> conveyor_result<Func, void> yield_later(Func &&func);
template <typename Func> conveyor_result<Func, void> yieldLast(Func &&func);
template <typename Func> conveyor_result<Func, void> yield_last(Func &&func);
} // namespace saw
// Secret stuff

View File

@ -106,7 +106,8 @@ template <typename T> class error_or final : public error_or_value {
private:
std::variant<error, fix_void<T>> value_or_error_;
static_assert(!std::is_same_v<T, void_t>, "Don't use internal private types");
static_assert(!std::is_same_v<T, void_t>,
"Don't use internal private types");
public:
error_or() = default;

View File

@ -10,7 +10,7 @@ async_io_stream::async_io_stream(own<io_stream> str)
.then([this]() { read_stepper_.read_step(*stream_); })
.sink()},
write_ready_{stream_->write_ready()
.then([this]() { write_stepper_.writeStep(*stream_); })
.then([this]() { write_stepper_.write_step(*stream_); })
.sink()},
read_disconnected_{stream_->on_read_disconnected()
.then([this]() {
@ -49,7 +49,7 @@ void async_io_stream::write(const void *buffer, size_t length) {
write_stepper_.write_task =
write_task_and_step_helper::write_io_task{buffer, length, 0};
write_stepper_.writeStep(*stream_);
write_stepper_.write_step(*stream_);
}
conveyor<size_t> async_io_stream::write_done() {

View File

@ -1,4 +1,4 @@
#include "io_helpers.h"
#include "io_helpers.h"
#include "io.h"
@ -44,7 +44,7 @@ void read_task_and_step_helper::read_step(input_stream &reader) {
}
}
void write_task_and_step_helper::writeStep(output_stream &writer) {
void write_task_and_step_helper::write_step(output_stream &writer) {
while (write_task.has_value()) {
write_io_task &task = *write_task;
@ -82,4 +82,4 @@ void write_task_and_step_helper::writeStep(output_stream &writer) {
}
}
} // namespace saw
} // namespace saw

View File

@ -48,6 +48,6 @@ public:
own<conveyor_feeder<size_t>> write_done = nullptr;
public:
void writeStep(output_stream &writer);
void write_step(output_stream &writer);
};
} // namespace saw

View File

@ -17,13 +17,13 @@ public:
*
*/
streaming_io_peer(
own<conveyor_feeder<HeapMessageRoot<Incoming, InContainer>>> feed,
own<conveyor_feeder<heap_message_root<Incoming, InContainer>>> feed,
own<async_io_stream> stream, Codec codec, BufferT in, BufferT out);
/**
*
*/
streaming_io_peer(
own<conveyor_feeder<HeapMessageRoot<Incoming, InContainer>>> feed,
own<conveyor_feeder<heap_message_root<Incoming, InContainer>>> feed,
own<async_io_stream> stream);
/**
@ -35,26 +35,26 @@ public:
/**
* Send a message to the remote peer
*/
error send(HeapMessageRoot<Outgoing, OutContainer> builder);
error send(heap_message_root<Outgoing, OutContainer> builder);
/**
* A phantom conveyor feeder. Meant for interfacing with other components
*/
conveyor_feeder<HeapMessageRoot<Outgoing, OutContainer>> &feeder();
conveyor_feeder<heap_message_root<Outgoing, OutContainer>> &feeder();
conveyor<void> on_read_disconnected();
private:
/// @unimplemented
class peer_conveyor_feeder final
: public conveyor_feeder<HeapMessageRoot<Outgoing, OutContainer>> {
: public conveyor_feeder<heap_message_root<Outgoing, OutContainer>> {
public:
peer_conveyor_feeder(
streaming_io_peer<Codec, Incoming, Outgoing, InContainer,
OutContainer, BufferT> &peer_)
: peer_{peer_} {}
void feed(HeapMessageRoot<Outgoing, OutContainer> &&data) override {
void feed(heap_message_root<Outgoing, OutContainer> &&data) override {
(void)data;
}
@ -70,7 +70,7 @@ private:
};
private:
own<conveyor_feeder<HeapMessageRoot<Incoming, InContainer>>>
own<conveyor_feeder<heap_message_root<Incoming, InContainer>>>
incoming_feeder_ = nullptr;
own<async_io_stream> io_stream_;
@ -96,8 +96,8 @@ template <typename Codec, typename Incoming, typename Outgoing,
typename BufferT = ring_buffer>
std::pair<own<streaming_io_peer<Codec, Incoming, Outgoing, InContainer,
OutContainer, BufferT>>,
conveyor<HeapMessageRoot<Incoming, InContainer>>>
newStreamingIoPeer(own<async_io_stream> stream);
conveyor<heap_message_root<Incoming, InContainer>>>
new_streaming_io_peer(own<async_io_stream> stream);
} // namespace saw

View File

@ -2,58 +2,59 @@ namespace saw {
template <typename Codec, typename Incoming, typename Outgoing,
typename InContainer, typename OutContainer, typename BufferT>
streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer, BufferT>::
streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer,
BufferT>::
streaming_io_peer(
own<conveyor_feeder<HeapMessageRoot<Incoming, InContainer>>> feed,
own<conveyor_feeder<heap_message_root<Incoming, InContainer>>> feed,
own<async_io_stream> str)
: streaming_io_peer{std::move(feed), std::move(str), {}, {}, {}} {}
template <typename Codec, typename Incoming, typename Outgoing,
typename InContainer, typename OutContainer, typename BufferT>
streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer, BufferT>::
streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer,
BufferT>::
streaming_io_peer(
own<conveyor_feeder<HeapMessageRoot<Incoming, InContainer>>> feed,
own<conveyor_feeder<heap_message_root<Incoming, InContainer>>> feed,
own<async_io_stream> stream, Codec codec, BufferT in, BufferT out)
: incoming_feeder_{std::move(feed)},
io_stream_{std::move(stream)}, codec_{std::move(codec)},
in_buffer_{std::move(in)}, out_buffer_{std::move(out)},
sink_read_{io_stream_->read_done()
.then([this](size_t bytes) -> error_or<void> {
in_buffer_.write_advance(bytes);
sink_read_{
io_stream_->read_done()
.then([this](size_t bytes) -> error_or<void> {
in_buffer_.write_advance(bytes);
if (in_buffer_.write_segment_length() == 0) {
return critical_error("Message too long");
}
if (in_buffer_.write_segment_length() == 0) {
return critical_error("Message too long");
}
io_stream_->read(&in_buffer_.write(), 1,
in_buffer_.write_segment_length());
io_stream_->read(&in_buffer_.write(), 1,
in_buffer_.write_segment_length());
while (true) {
auto root =
heapMessageRoot<Incoming, InContainer>();
auto builder = root.build();
while (true) {
auto root = heap_message_root<Incoming, InContainer>();
auto builder = root.build();
error err =
codec_.template decode<Incoming, InContainer>(
builder, in_buffer_);
if (err.is_critical()) {
return err;
}
error err = codec_.template decode<Incoming, InContainer>(
builder, in_buffer_);
if (err.is_critical()) {
return err;
}
if (!err.failed()) {
incoming_feeder_->feed(std::move(root));
} else {
break;
}
}
if (!err.failed()) {
incoming_feeder_->feed(std::move(root));
} else {
break;
}
}
return void_t{};
})
.sink([this](error err) {
incoming_feeder_->fail(err.copy_error());
return void_t{};
})
.sink([this](error err) {
incoming_feeder_->fail(err.copy_error());
return err;
})},
return err;
})},
sink_write_{io_stream_->write_done()
.then([this](size_t bytes) -> error_or<void> {
out_buffer_.read_advance(bytes);
@ -72,8 +73,8 @@ streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer, BufferT>
template <typename Codec, typename Incoming, typename Outgoing,
typename InContainer, typename OutContainer, typename BufferT>
error streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer,
BufferT>::send(HeapMessageRoot<Outgoing, OutContainer>
msg) {
BufferT>::send(heap_message_root<Outgoing, OutContainer>
msg) {
bool restart_write = out_buffer_.read_segment_length() == 0;
error err =
@ -83,7 +84,8 @@ error streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer,
}
if (restart_write) {
io_stream_->write(&out_buffer_.read(), out_buffer_.read_segment_length());
io_stream_->write(&out_buffer_.read(),
out_buffer_.read_segment_length());
}
return no_error();
@ -91,22 +93,24 @@ error streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer,
template <typename Codec, typename Incoming, typename Outgoing,
typename InContainer, typename OutContainer, typename BufferT>
conveyor<void> streaming_io_peer<Codec, Incoming, Outgoing, InContainer,
OutContainer, BufferT>::on_read_disconnected() {
conveyor<void>
streaming_io_peer<Codec, Incoming, Outgoing, InContainer, OutContainer,
BufferT>::on_read_disconnected() {
return io_stream_->on_read_disconnected();
}
template <typename Codec, typename Incoming, typename Outgoing,
typename InContainer, typename OutContainer, typename BufferT>
std::pair<own<streaming_io_peer<Codec, Incoming, Outgoing, InContainer,
OutContainer, BufferT>>,
conveyor<HeapMessageRoot<Incoming, InContainer>>>
OutContainer, BufferT>>,
conveyor<heap_message_root<Incoming, InContainer>>>
newstreaming_io_peer(own<async_io_stream> stream) {
auto caf = newconveyorAndFeeder<HeapMessageRoot<Incoming, InContainer>>();
auto caf =
new_conveyor_and_feeder<heap_message_root<Incoming, InContainer>>();
return {heap<streaming_io_peer<Codec, Incoming, Outgoing, InContainer,
OutContainer, BufferT>>(std::move(caf.feeder),
std::move(stream)),
OutContainer, BufferT>>(
std::move(caf.feeder), std::move(stream)),
std::move(caf.conveyor)};
}

View File

@ -74,8 +74,8 @@ public:
*/
template <size_t i>
typename std::enable_if<
!SchemaIsArray<
typename MessageParameterPackType<i, V...>::Type>::Value,
!schema_is_array<
typename message_parameter_pack_type<i, V...>::Type>::Value,
typename Container::template ElementType<i>::builder>::type
init() {
return typename Container::template ElementType<i>::builder{
@ -88,23 +88,23 @@ public:
*/
template <string_literal Literal>
typename std::enable_if<
!SchemaIsArray<typename MessageParameterPackType<
MessageParameterKeyPackIndex<Literal, Keys...>::Value,
!schema_is_array<typename message_parameter_pack_type<
message_parameter_key_pack_index<Literal, Keys...>::Value,
V...>::Type>::Value,
typename Container::template ElementType<
MessageParameterKeyPackIndex<Literal,
Keys...>::Value>::builder>::type
message_parameter_key_pack_index<Literal, Keys...>::Value>::
builder>::type
init() {
constexpr size_t i =
MessageParameterKeyPackIndex<Literal, Keys...>::Value;
message_parameter_key_pack_index<Literal, Keys...>::Value;
return init<i>();
}
template <size_t i>
typename std::enable_if<
SchemaIsArray<
typename MessageParameterPackType<i, V...>::Type>::Value,
schema_is_array<
typename message_parameter_pack_type<i, V...>::Type>::Value,
typename Container::template ElementType<i>::builder>::type
init(size_t size = 0) {
auto array_builder =
@ -118,15 +118,15 @@ public:
*/
template <string_literal Literal>
typename std::enable_if<
SchemaIsArray<typename MessageParameterPackType<
MessageParameterKeyPackIndex<Literal, Keys...>::Value,
schema_is_array<typename message_parameter_pack_type<
message_parameter_key_pack_index<Literal, Keys...>::Value,
V...>::Type>::Value,
typename Container::template ElementType<
MessageParameterKeyPackIndex<Literal,
Keys...>::Value>::builder>::type
message_parameter_key_pack_index<Literal, Keys...>::Value>::
builder>::type
init(size_t size) {
constexpr size_t i =
MessageParameterKeyPackIndex<Literal, Keys...>::Value;
message_parameter_key_pack_index<Literal, Keys...>::Value;
return init<i>(size);
}
@ -156,11 +156,11 @@ public:
*/
template <string_literal Literal>
typename Container::template ElementType<
MessageParameterKeyPackIndex<Literal, Keys...>::Value>::reader
message_parameter_key_pack_index<Literal, Keys...>::Value>::reader
get() {
// The index of the first match
constexpr size_t i =
MessageParameterKeyPackIndex<Literal, Keys...>::Value;
message_parameter_key_pack_index<Literal, Keys...>::Value;
return get<i>();
}
@ -202,8 +202,8 @@ public:
template <size_t i>
typename std::enable_if<
!SchemaIsArray<
typename MessageParameterPackType<i, V...>::Type>::Value,
!schema_is_array<
typename message_parameter_pack_type<i, V...>::Type>::Value,
typename Container::template ElementType<i>::builder>::type
init() {
@ -213,15 +213,15 @@ public:
template <string_literal Literal>
typename std::enable_if<
!SchemaIsArray<typename MessageParameterPackType<
MessageParameterKeyPackIndex<Literal, Keys...>::Value,
!schema_is_array<typename message_parameter_pack_type<
message_parameter_key_pack_index<Literal, Keys...>::Value,
V...>::Type>::Value,
typename Container::template ElementType<
MessageParameterKeyPackIndex<Literal,
Keys...>::Value>::builder>::type
message_parameter_key_pack_index<Literal, Keys...>::Value>::
builder>::type
init() {
constexpr size_t i =
MessageParameterKeyPackIndex<Literal, Keys...>::Value;
message_parameter_key_pack_index<Literal, Keys...>::Value;
return init<i>();
}
@ -231,8 +231,8 @@ public:
*/
template <size_t i>
typename std::enable_if<
SchemaIsArray<
typename MessageParameterPackType<i, V...>::Type>::Value,
schema_is_array<
typename message_parameter_pack_type<i, V...>::Type>::Value,
typename Container::template ElementType<i>::builder>::type
init(size_t size = 0) {
return typename Container::template ElementType<i>::builder{
@ -241,15 +241,15 @@ public:
template <string_literal Literal>
typename std::enable_if<
SchemaIsArray<typename MessageParameterPackType<
MessageParameterKeyPackIndex<Literal, Keys...>::Value,
schema_is_array<typename message_parameter_pack_type<
message_parameter_key_pack_index<Literal, Keys...>::Value,
V...>::Type>::Value,
typename Container::template ElementType<
MessageParameterKeyPackIndex<Literal,
Keys...>::Value>::builder>::type
message_parameter_key_pack_index<Literal, Keys...>::Value>::
builder>::type
init(size_t size) {
constexpr size_t i =
MessageParameterKeyPackIndex<Literal, Keys...>::Value;
message_parameter_key_pack_index<Literal, Keys...>::Value;
return init<i>(size);
}
@ -272,24 +272,24 @@ public:
template <string_literal Literal>
typename Container::template ElementType<
MessageParameterKeyPackIndex<Literal, Keys...>::Value>::reader
message_parameter_key_pack_index<Literal, Keys...>::Value>::reader
get() {
// The index of the first match
constexpr size_t i =
MessageParameterKeyPackIndex<Literal, Keys...>::Value;
message_parameter_key_pack_index<Literal, Keys...>::Value;
return get<i>();
}
template <string_literal Literal>
static constexpr size_t toIndex() noexcept {
return MessageParameterKeyPackIndex<Literal, Keys...>::Value;
static constexpr size_t to_index() noexcept {
return message_parameter_key_pack_index<Literal, Keys...>::Value;
}
size_t index() const noexcept { return message_.container_.index(); }
template <string_literal Literal> bool hasAlternative() const {
return index() == toIndex<Literal>();
template <string_literal Literal> bool has_alternative() const {
return index() == to_index<Literal>();
}
};
};
@ -383,8 +383,8 @@ public:
template <size_t i>
typename std::enable_if<
!SchemaIsArray<
typename MessageParameterPackType<i, T...>::Type>::Value,
!schema_is_array<
typename message_parameter_pack_type<i, T...>::Type>::Value,
typename Container::template ElementType<i>::builder>::type
init() {
return typename Container::template ElementType<i>::builder{
@ -393,8 +393,8 @@ public:
template <size_t i>
typename std::enable_if<
SchemaIsArray<
typename MessageParameterPackType<i, T...>::Type>::Value,
schema_is_array<
typename message_parameter_pack_type<i, T...>::Type>::Value,
typename Container::template ElementType<i>::builder>::type
init(size_t size = 0) {
return typename Container::template ElementType<i>::builder{
@ -511,12 +511,13 @@ public:
};
template <class Schema, class Container = message_container<Schema>>
class HeapMessageRoot {
class heap_message_root {
private:
own<message<Schema, Container>> root_;
public:
HeapMessageRoot(own<message<Schema, Container>> r) : root_{std::move(r)} {}
heap_message_root(own<message<Schema, Container>> r)
: root_{std::move(r)} {}
typename message<Schema, Container>::builder build() {
assert(root_);
@ -530,7 +531,7 @@ public:
};
template <class T, class Container>
class HeapMessageRoot<schema::Array<T>, Container> {
class heap_message_root<schema::Array<T>, Container> {
public:
using Schema = schema::Array<T>;
@ -538,7 +539,8 @@ private:
own<message<Schema, Container>> root_;
public:
HeapMessageRoot(own<message<Schema, Container>> r) : root_{std::move(r)} {}
heap_message_root(own<message<Schema, Container>> r)
: root_{std::move(r)} {}
typename message<Schema, Container>::builder build(size_t size) {
assert(root_);
@ -555,8 +557,8 @@ public:
* Minor helper for creating a message root
*/
template <class Schema, class Container = message_container<Schema>>
inline HeapMessageRoot<Schema, Container> heapMessageRoot() {
inline heap_message_root<Schema, Container> new_heap_message_root() {
own<message<Schema, Container>> root = heap<message<Schema, Container>>();
return HeapMessageRoot<Schema, Container>{std::move(root)};
return heap_message_root<Schema, Container>{std::move(root)};
}
} // namespace saw

View File

@ -10,16 +10,17 @@ template <class T> class message_container;
template <class T, class Container = message_container<T>> class message;
template <size_t N, class... T> struct MessageParameterPackType;
template <size_t N, class... T> struct message_parameter_pack_type;
template <class TN, class... T> struct MessageParameterPackType<0, TN, T...> {
template <class TN, class... T>
struct message_parameter_pack_type<0, TN, T...> {
using Type = TN;
};
template <size_t N, class TN, class... T>
struct MessageParameterPackType<N, TN, T...> {
struct message_parameter_pack_type<N, TN, T...> {
static_assert(sizeof...(T) > 0, "Exhausted parameters");
using Type = typename MessageParameterPackType<N - 1, T...>::Type;
using Type = typename message_parameter_pack_type<N - 1, T...>::Type;
};
template <class T, class... TL> struct MessageParameterPackIndex;
@ -40,31 +41,31 @@ struct MessageParameterPackIndex<T, TL0, TL...> {
* This is the workaround
*/
template <string_literal V, string_literal Key0, string_literal... Keys>
struct MessageParameterKeyPackIndexHelper {
struct message_parameter_key_pack_index_helper {
static constexpr size_t Value =
(V == Key0)
? (0u)
: (1u + MessageParameterKeyPackIndexHelper<V, Keys...>::Value);
: (1u + message_parameter_key_pack_index_helper<V, Keys...>::Value);
};
template <string_literal V, string_literal Key0>
struct MessageParameterKeyPackIndexHelper<V, Key0> {
struct message_parameter_key_pack_index_helper<V, Key0> {
static constexpr size_t Value = (V == Key0) ? (0u) : (1u);
};
template <string_literal V, string_literal... Keys>
struct MessageParameterKeyPackIndex {
struct message_parameter_key_pack_index {
static constexpr size_t Value =
MessageParameterKeyPackIndexHelper<V, Keys...>::Value;
message_parameter_key_pack_index_helper<V, Keys...>::Value;
static_assert(Value < sizeof...(Keys),
"Provided StringLiteral doesn't exist in searched list");
};
template <class T> struct SchemaIsArray {
template <class T> struct schema_is_array {
constexpr static bool Value = false;
};
template <class T> struct SchemaIsArray<schema::Array<T>> {
template <class T> struct schema_is_array<schema::Array<T>> {
constexpr static bool Value = true;
};
@ -78,7 +79,7 @@ public:
using SchemaType = schema::Struct<schema::NamedMember<V, Keys>...>;
template <size_t i>
using ElementType = typename MessageParameterPackType<
using ElementType = typename message_parameter_pack_type<
i, message<V, message_container<V>>...>::Type;
template <size_t i> ElementType<i> &get() { return std::get<i>(values_); }
@ -97,12 +98,13 @@ public:
using SchemaType = schema::Union<schema::NamedMember<V, Keys>...>;
template <size_t i>
using ElementType = typename MessageParameterPackType<
using ElementType = typename message_parameter_pack_type<
i, message<V, message_container<V>>...>::Type;
template <size_t i> ElementType<i> &get() {
if (i != value_.index()) {
using MessageIV = typename MessageParameterPackType<i, V...>::Type;
using MessageIV =
typename message_parameter_pack_type<i, V...>::Type;
value_ = message<MessageIV, message_container<MessageIV>>{};
}
return std::get<i>(value_);
@ -146,7 +148,7 @@ public:
using SchemaType = schema::Tuple<T...>;
template <size_t i>
using ElementType = typename MessageParameterPackType<
using ElementType = typename message_parameter_pack_type<
i, message<T, message_container<T>>...>::Type;
template <size_t i> ElementType<i> &get() { return std::get<i>(values_); }

View File

@ -5,37 +5,37 @@
#include "stream_endian.h"
namespace saw {
class ProtoKelCodec {
class proto_kel_codec {
public:
using UnionIdT = uint32_t;
using ArrayLengthT = uint64_t;
using PacketLengthT = uint64_t;
private:
struct ReadContext {
struct read_context {
buffer &buffer;
size_t offset = 0;
};
template <typename T> friend struct ProtoKelEncodeImpl;
template <typename T> friend struct proto_kel_encode_impl;
template <typename T> friend struct ProtoKelDecodeImpl;
template <typename T> friend struct proto_kel_decode_impl;
public:
struct Limits {
ProtoKelCodec::PacketLengthT packet_size;
struct limits {
proto_kel_codec::PacketLengthT packet_size;
Limits() : packet_size{4096} {}
Limits(ProtoKelCodec::PacketLengthT ps) : packet_size{ps} {}
limits() : packet_size{4096} {}
limits(proto_kel_codec::PacketLengthT ps) : packet_size{ps} {}
};
struct Version {
struct version {
size_t major;
size_t minor;
size_t security;
};
const Version version() const { return Version{0, 0, 0}; }
const version get_version() const { return version{0, 0, 0}; }
template <class Schema, class Container = message_container<Schema>>
error encode(typename message<Schema, Container>::reader reader,
@ -43,13 +43,13 @@ public:
template <class Schema, class Container = message_container<Schema>>
error decode(typename message<Schema, Container>::builder builder,
buffer &buffer, const Limits &limits = Limits{});
buffer &buffer, const limits &lim = limits{});
};
template <class T> struct ProtoKelEncodeImpl;
template <class T> struct proto_kel_encode_impl;
template <class T, size_t N, class Container>
struct ProtoKelEncodeImpl<message<schema::Primitive<T, N>, Container>> {
struct proto_kel_encode_impl<message<schema::Primitive<T, N>, Container>> {
static error
encode(typename message<schema::Primitive<T, N>, Container>::reader data,
buffer &buffer) {
@ -66,7 +66,7 @@ struct ProtoKelEncodeImpl<message<schema::Primitive<T, N>, Container>> {
};
template <class Container>
struct ProtoKelEncodeImpl<message<schema::String, Container>> {
struct proto_kel_encode_impl<message<schema::String, Container>> {
static error
encode(typename message<schema::String, Container>::reader data,
buffer &buffer) {
@ -96,166 +96,170 @@ struct ProtoKelEncodeImpl<message<schema::String, Container>> {
};
template <class... T, class Container>
struct ProtoKelEncodeImpl<message<schema::Tuple<T...>, Container>> {
struct proto_kel_encode_impl<message<schema::Tuple<T...>, Container>> {
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(T), error>::type
encodeMembers(typename message<schema::Tuple<T...>, Container>::reader,
buffer &) {
encode_members(typename message<schema::Tuple<T...>, Container>::reader,
buffer &) {
return no_error();
}
template <size_t i = 0>
static typename std::enable_if<(i < sizeof...(T)), error>::type
encodeMembers(typename message<schema::Tuple<T...>, Container>::reader data,
buffer &buffer) {
encode_members(
typename message<schema::Tuple<T...>, Container>::reader data,
buffer &buffer) {
error err =
ProtoKelEncodeImpl<typename Container::template ElementType<i>>::
proto_kel_encode_impl<typename Container::template ElementType<i>>::
encode(data.template get<i>(), buffer);
if (err.failed()) {
return err;
}
return encodeMembers<i + 1>(data, buffer);
return encode_members<i + 1>(data, buffer);
}
static error
encode(typename message<schema::Tuple<T...>, Container>::reader data,
buffer &buffer) {
return encodeMembers<0>(data, buffer);
return encode_members<0>(data, buffer);
}
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(T), size_t>::type
sizeMembers(typename message<schema::Tuple<T...>, Container>::reader) {
size_members(typename message<schema::Tuple<T...>, Container>::reader) {
return 0;
}
template <size_t i = 0>
static typename std::enable_if <
i<sizeof...(T), size_t>::type sizeMembers(
i<sizeof...(T), size_t>::type size_members(
typename message<schema::Tuple<T...>, Container>::reader reader) {
return ProtoKelEncodeImpl<typename Container::template ElementType<i>>::
size(reader.template get<i>()) +
sizeMembers<i + 1>(reader);
return proto_kel_encode_impl<typename Container::template ElementType<
i>>::size(reader.template get<i>()) +
size_members<i + 1>(reader);
}
static size_t
size(typename message<schema::Tuple<T...>, Container>::reader reader) {
return sizeMembers<0>(reader);
return size_members<0>(reader);
}
};
template <typename... V, string_literal... K, class Container>
struct ProtoKelEncodeImpl<
struct proto_kel_encode_impl<
message<schema::Struct<schema::NamedMember<V, K>...>, Container>> {
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(V), error>::type
encodeMembers(typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::reader,
buffer &) {
encode_members(
typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::reader,
buffer &) {
return no_error();
}
template <size_t i = 0>
static typename std::enable_if <
i<sizeof...(V), error>::type encodeMembers(
i<sizeof...(V), error>::type encode_members(
typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::reader data,
buffer &buffer) {
error err =
ProtoKelEncodeImpl<typename Container::template ElementType<i>>::
proto_kel_encode_impl<typename Container::template ElementType<i>>::
encode(data.template get<i>(), buffer);
if (err.failed()) {
return err;
}
return encodeMembers<i + 1>(data, buffer);
return encode_members<i + 1>(data, buffer);
}
static error
encode(typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::reader data,
buffer &buffer) {
return encodeMembers<0>(data, buffer);
return encode_members<0>(data, buffer);
}
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(V), size_t>::type
sizeMembers(typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::reader) {
size_members(typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::reader) {
return 0;
}
template <size_t i = 0>
static typename std::enable_if <
i<sizeof...(V), size_t>::type sizeMembers(
i<sizeof...(V), size_t>::type size_members(
typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::reader reader) {
return ProtoKelEncodeImpl<typename Container::template ElementType<i>>::
size(reader.template get<i>()) +
sizeMembers<i + 1>(reader);
return proto_kel_encode_impl<typename Container::template ElementType<
i>>::size(reader.template get<i>()) +
size_members<i + 1>(reader);
}
static size_t
size(typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::reader reader) {
return sizeMembers<0>(reader);
return size_members<0>(reader);
}
};
template <typename... V, string_literal... K, class Container>
struct ProtoKelEncodeImpl<
struct proto_kel_encode_impl<
message<schema::Union<schema::NamedMember<V, K>...>, Container>> {
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(V), error>::type
encodeMembers(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::reader,
buffer &) {
encode_members(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::reader,
buffer &) {
return no_error();
}
template <size_t i = 0>
static typename std::enable_if <
i<sizeof...(V), error>::type encodeMembers(
i<sizeof...(V), error>::type encode_members(
typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::reader reader,
buffer &buffer) {
if (reader.index() == i) {
error err =
stream_value<ProtoKelCodec::UnionIdT>::encode(i, buffer);
stream_value<proto_kel_codec::UnionIdT>::encode(i, buffer);
if (err.failed()) {
return err;
}
return ProtoKelEncodeImpl<typename Container::template ElementType<
i>>::encode(reader.template get<i>(), buffer);
return proto_kel_encode_impl<
typename Container::template ElementType<i>>::
encode(reader.template get<i>(), buffer);
}
return encodeMembers<i + 1>(reader, buffer);
return encode_members<i + 1>(reader, buffer);
}
static error
encode(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::reader reader,
buffer &buffer) {
return encodeMembers<0>(reader, buffer);
return encode_members<0>(reader, buffer);
}
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(V), size_t>::type
sizeMembers(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::reader) {
size_members(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::reader) {
return 0;
}
template <size_t i = 0>
static typename std::enable_if <
i<sizeof...(V), size_t>::type sizeMembers(
i<sizeof...(V), size_t>::type size_members(
typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::reader reader) {
if (reader.index() == i) {
return ProtoKelEncodeImpl<typename Container::template ElementType<
i>>::size(reader.template get<i>());
return proto_kel_encode_impl<
typename Container::template ElementType<i>>::
size(reader.template get<i>());
}
return sizeMembers<i + 1>(reader);
return size_members<i + 1>(reader);
}
/*
@ -264,18 +268,18 @@ struct ProtoKelEncodeImpl<
static size_t
size(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::reader reader) {
return sizeof(ProtoKelCodec::UnionIdT) + sizeMembers<0>(reader);
return sizeof(proto_kel_codec::UnionIdT) + size_members<0>(reader);
}
};
template <class T, class Container>
struct ProtoKelEncodeImpl<message<schema::Array<T>, Container>> {
struct proto_kel_encode_impl<message<schema::Array<T>, Container>> {
static error
encode(typename message<schema::Array<T>, Container>::reader data,
buffer &buffer) {
ProtoKelCodec::ArrayLengthT array_length = data.size();
proto_kel_codec::ArrayLengthT array_length = data.size();
{
error err = stream_value<ProtoKelCodec::ArrayLengthT>::encode(
error err = stream_value<proto_kel_codec::ArrayLengthT>::encode(
array_length, buffer);
if (err.failed()) {
return err;
@ -284,7 +288,7 @@ struct ProtoKelEncodeImpl<message<schema::Array<T>, Container>> {
for (size_t i = 0; i < array_length; ++i) {
error err =
ProtoKelEncodeImpl<typename Container::ElementType>::encode(
proto_kel_encode_impl<typename Container::ElementType>::encode(
data.get(i), buffer);
if (err.failed()) {
return err;
@ -298,10 +302,10 @@ struct ProtoKelEncodeImpl<message<schema::Array<T>, Container>> {
*/
static size_t
size(typename message<schema::Array<T>, Container>::reader data) {
size_t members = sizeof(ProtoKelCodec::ArrayLengthT);
size_t members = sizeof(proto_kel_codec::ArrayLengthT);
for (size_t i = 0; i < data.size(); ++i) {
members +=
ProtoKelEncodeImpl<typename Container::ElementType>::size(
proto_kel_encode_impl<typename Container::ElementType>::size(
data.get(i));
}
@ -312,10 +316,10 @@ struct ProtoKelEncodeImpl<message<schema::Array<T>, Container>> {
/*
* Decode Implementations
*/
template <typename T> struct ProtoKelDecodeImpl;
template <typename T> struct proto_kel_decode_impl;
template <class T, size_t N, class Container>
struct ProtoKelDecodeImpl<message<schema::Primitive<T, N>, Container>> {
struct proto_kel_decode_impl<message<schema::Primitive<T, N>, Container>> {
static error
decode(typename message<schema::Primitive<T, N>, Container>::builder data,
buffer &buffer) {
@ -328,7 +332,7 @@ struct ProtoKelDecodeImpl<message<schema::Primitive<T, N>, Container>> {
};
template <class Container>
struct ProtoKelDecodeImpl<message<schema::String, Container>> {
struct proto_kel_decode_impl<message<schema::String, Container>> {
static error
decode(typename message<schema::String, Container>::builder data,
buffer &buffer) {
@ -362,107 +366,108 @@ struct ProtoKelDecodeImpl<message<schema::String, Container>> {
};
template <class... T, class Container>
struct ProtoKelDecodeImpl<message<schema::Tuple<T...>, Container>> {
struct proto_kel_decode_impl<message<schema::Tuple<T...>, Container>> {
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(T), error>::type
decodeMembers(typename message<schema::Tuple<T...>, Container>::builder,
buffer &) {
decode_members(typename message<schema::Tuple<T...>, Container>::builder,
buffer &) {
return no_error();
}
template <size_t i = 0>
static typename std::enable_if <
i<sizeof...(T), error>::type decodeMembers(
i<sizeof...(T), error>::type decode_members(
typename message<schema::Tuple<T...>, Container>::builder builder,
buffer &buffer) {
error err =
ProtoKelDecodeImpl<typename Container::template ElementType<i>>::
proto_kel_decode_impl<typename Container::template ElementType<i>>::
decode(builder.template init<i>(), buffer);
if (err.failed()) {
return err;
}
return decodeMembers<i + 1>(builder, buffer);
return decode_members<i + 1>(builder, buffer);
}
static error
decode(typename message<schema::Tuple<T...>, Container>::builder builder,
buffer &buffer) {
return decodeMembers<0>(builder, buffer);
return decode_members<0>(builder, buffer);
}
};
template <class... V, string_literal... K, class Container>
struct ProtoKelDecodeImpl<
struct proto_kel_decode_impl<
message<schema::Struct<schema::NamedMember<V, K>...>, Container>> {
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(V), error>::type
decodeMembers(typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::builder,
buffer &) {
decode_members(
typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::builder,
buffer &) {
return no_error();
}
template <size_t i = 0>
static typename std::enable_if <
i<sizeof...(V), error>::type decodeMembers(
i<sizeof...(V), error>::type decode_members(
typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::builder builder,
buffer &buffer) {
error err =
ProtoKelDecodeImpl<typename Container::template ElementType<i>>::
proto_kel_decode_impl<typename Container::template ElementType<i>>::
decode(builder.template init<i>(), buffer);
if (err.failed()) {
return err;
}
return decodeMembers<i + 1>(builder, buffer);
return decode_members<i + 1>(builder, buffer);
}
static error
decode(typename message<schema::Struct<schema::NamedMember<V, K>...>,
Container>::builder builder,
buffer &buffer) {
return decodeMembers<0>(builder, buffer);
return decode_members<0>(builder, buffer);
}
};
template <class... V, string_literal... K, class Container>
struct ProtoKelDecodeImpl<
struct proto_kel_decode_impl<
message<schema::Union<schema::NamedMember<V, K>...>, Container>> {
template <size_t i = 0>
static typename std::enable_if<i == sizeof...(V), error>::type
decodeMembers(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::builder,
buffer &, ProtoKelCodec::UnionIdT) {
decode_members(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::builder,
buffer &, proto_kel_codec::UnionIdT) {
return no_error();
}
template <size_t i = 0>
static typename std::enable_if <
i<sizeof...(V), error>::type decodeMembers(
i<sizeof...(V), error>::type decode_members(
typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::builder builder,
buffer &buffer, ProtoKelCodec::UnionIdT id) {
buffer &buffer, proto_kel_codec::UnionIdT id) {
if (id == i) {
error err =
ProtoKelDecodeImpl<typename Container::template ElementType<
proto_kel_decode_impl<typename Container::template ElementType<
i>>::decode(builder.template init<i>(), buffer);
if (err.failed()) {
return err;
}
}
return decodeMembers<i + 1>(builder, buffer, id);
return decode_members<i + 1>(builder, buffer, id);
}
static error
decode(typename message<schema::Union<schema::NamedMember<V, K>...>,
Container>::builder builder,
buffer &buffer) {
ProtoKelCodec::UnionIdT id = 0;
error err = stream_value<ProtoKelCodec::UnionIdT>::decode(id, buffer);
proto_kel_codec::UnionIdT id = 0;
error err = stream_value<proto_kel_codec::UnionIdT>::decode(id, buffer);
if (err.failed()) {
return err;
}
@ -470,18 +475,18 @@ struct ProtoKelDecodeImpl<
return critical_error("Union doesn't have this many id's");
}
return decodeMembers<0>(builder, buffer, id);
return decode_members<0>(builder, buffer, id);
}
};
template <class T, class Container>
struct ProtoKelDecodeImpl<message<schema::Array<T>, Container>> {
struct proto_kel_decode_impl<message<schema::Array<T>, Container>> {
static error
decode(typename message<schema::Array<T>, Container>::builder data,
buffer &buffer) {
ProtoKelCodec::ArrayLengthT array_length = 0;
proto_kel_codec::ArrayLengthT array_length = 0;
{
error err = stream_value<ProtoKelCodec::ArrayLengthT>::decode(
error err = stream_value<proto_kel_codec::ArrayLengthT>::decode(
array_length, buffer);
if (err.failed()) {
return err;
@ -492,7 +497,7 @@ struct ProtoKelDecodeImpl<message<schema::Array<T>, Container>> {
for (size_t i = 0; i < array_length; ++i) {
error err =
ProtoKelDecodeImpl<typename Container::ElementType>::decode(
proto_kel_decode_impl<typename Container::ElementType>::decode(
data.init(i), buffer);
if (err.failed()) {
return err;
@ -503,30 +508,30 @@ struct ProtoKelDecodeImpl<message<schema::Array<T>, Container>> {
};
template <class Schema, class Container>
error ProtoKelCodec::encode(typename message<Schema, Container>::reader reader,
buffer &buffer) {
error proto_kel_codec::encode(
typename message<Schema, Container>::reader reader, buffer &buffer) {
buffer_view view{buffer};
ProtoKelCodec::PacketLengthT packet_length =
ProtoKelEncodeImpl<message<Schema, Container>>::size(reader);
proto_kel_codec::PacketLengthT packet_length =
proto_kel_encode_impl<message<Schema, Container>>::size(reader);
// Check the size of the packet for the first
// message length description
error err = view.write_require_length(packet_length +
sizeof(ProtoKelCodec::PacketLengthT));
error err = view.write_require_length(
packet_length + sizeof(proto_kel_codec::PacketLengthT));
if (err.failed()) {
return err;
}
{
error err = stream_value<ProtoKelCodec::PacketLengthT>::encode(
error err = stream_value<proto_kel_codec::PacketLengthT>::encode(
packet_length, view);
if (err.failed()) {
return err;
}
}
{
error err = ProtoKelEncodeImpl<message<Schema, Container>>::encode(
error err = proto_kel_encode_impl<message<Schema, Container>>::encode(
reader, view);
if (err.failed()) {
return err;
@ -538,14 +543,14 @@ error ProtoKelCodec::encode(typename message<Schema, Container>::reader reader,
}
template <class Schema, class Container>
error ProtoKelCodec::decode(
error proto_kel_codec::decode(
typename message<Schema, Container>::builder builder, buffer &buffer,
const Limits &limits) {
const limits &limits) {
buffer_view view{buffer};
ProtoKelCodec::PacketLengthT packet_length = 0;
proto_kel_codec::PacketLengthT packet_length = 0;
{
error err = stream_value<ProtoKelCodec::PacketLengthT>::decode(
error err = stream_value<proto_kel_codec::PacketLengthT>::decode(
packet_length, view);
if (err.failed()) {
return err;
@ -562,14 +567,14 @@ error ProtoKelCodec::decode(
}
{
error err = ProtoKelDecodeImpl<message<Schema, Container>>::decode(
error err = proto_kel_decode_impl<message<Schema, Container>>::decode(
builder, view);
if (err.failed()) {
return err;
}
}
{
if (ProtoKelEncodeImpl<message<Schema, Container>>::size(
if (proto_kel_encode_impl<message<Schema, Container>>::size(
builder.as_reader()) != packet_length) {
return critical_error("Bad packet format");
}

View File

@ -5,7 +5,7 @@
namespace saw {
namespace schema {
// NOLINTBEGIN
template <typename T, string_literal Literal> struct NamedMember {};
template <typename... T> struct Struct {
@ -72,5 +72,6 @@ template <class... T> struct Interface {
template <class... Request, class... Response, string_literal... Literal>
struct Interface<Function<Request, Response, Literal>...> {};
// NOLINTEND
} // namespace schema
} // namespace saw

View File

@ -16,7 +16,7 @@ using TestTuple = schema::Tuple<schema::UInt32, schema::String>;
SAW_TEST("Message Tuple"){
std::string test_string_1 = "banana";
auto root = saw::heapMessageRoot<TestTuple>();
auto root = saw::new_heap_message_root<TestTuple>();
auto builder = root.build();
auto uint = builder.init<0>();
uint.set(10);
@ -36,7 +36,7 @@ SAW_TEST("Message Tuple nested"){
std::string test_string_1 = "banana";
std::string test_string_2 = "bat";
auto root = saw::heapMessageRoot<NestedTestTuple>();
auto root = saw::new_heap_message_root<NestedTestTuple>();
auto builder = root.build();
auto inner_list = builder.init<0>();
auto uint = inner_list.init<0>();
@ -64,7 +64,7 @@ using TestStruct = schema::Struct<
SAW_TEST("Message Struct"){
std::string test_string = "foo";
auto root = saw::heapMessageRoot<TestStruct>();
auto root = saw::new_heap_message_root<TestStruct>();
auto builder = root.build();
auto uint = builder.init<"test_uint">();
uint.set(23);
@ -103,7 +103,7 @@ void arrayCheck(saw::message<TestArray>::builder builder){
}
SAW_TEST("Message Array"){
auto root = saw::heapMessageRoot<TestArray>();
auto root = saw::new_heap_message_root<TestArray>();
auto builder = root.build(3);
@ -115,7 +115,7 @@ using TestArrayStruct = schema::Struct<
>;
SAW_TEST("Message Array in Struct"){
auto root = saw::heapMessageRoot<TestArrayStruct>();
auto root = saw::new_heap_message_root<TestArrayStruct>();
auto builder = root.build();

View File

@ -27,26 +27,26 @@ SAW_TEST("Primitive Encoding"){
using namespace saw;
uint32_t value = 5;
auto root = heapMessageRoot<TestSize>();
auto root = new_heap_message_root<TestSize>();
auto builder = root.build();
builder.set(value);
ring_buffer temp_buffer;
ProtoKelCodec codec;
proto_kel_codec codec;
error err = codec.encode<TestSize>(root.read(), temp_buffer);
SAW_EXPECT(!err.failed(), err.message());
SAW_EXPECT(temp_buffer.read_composite_length() == (sizeof(value)+sizeof(ProtoKelCodec::PacketLengthT)), "Bad Size: " + std::to_string(temp_buffer.read_composite_length()));
constexpr size_t pkt_shift = sizeof(ProtoKelCodec::PacketLengthT);
SAW_EXPECT(temp_buffer.read_composite_length() == (sizeof(value)+sizeof(proto_kel_codec::PacketLengthT)), "Bad Size: " + std::to_string(temp_buffer.read_composite_length()));
constexpr size_t pkt_shift = sizeof(proto_kel_codec::PacketLengthT);
SAW_EXPECT(temp_buffer[pkt_shift] == 5 && temp_buffer[pkt_shift+1] == 0 && temp_buffer[pkt_shift+2] == 0 && temp_buffer[pkt_shift+3] == 0, "Wrong encoded values");
}
SAW_TEST("List Encoding"){
using namespace saw;
auto root = heapMessageRoot<TestTuple>();
auto root = new_heap_message_root<TestTuple>();
auto builder = root.build();
auto first = builder.init<0>();
@ -55,7 +55,7 @@ SAW_TEST("List Encoding"){
second.set(43871);
ring_buffer buffer;
ProtoKelCodec codec;
proto_kel_codec codec;
error err = codec.encode<TestTuple>(root.read(), buffer);
@ -67,7 +67,7 @@ SAW_TEST("List Encoding"){
SAW_TEST("Struct Encoding"){
using namespace saw;
auto root = heapMessageRoot<TestStruct>();
auto root = new_heap_message_root<TestStruct>();
auto builder = root.build();
auto test_uint = builder.init<"test_uint">();
@ -81,7 +81,7 @@ SAW_TEST("Struct Encoding"){
string_name.set("test_name");
ring_buffer buffer;
ProtoKelCodec codec;
proto_kel_codec codec;
error err = codec.encode<TestStruct>(builder.as_reader(), buffer);
@ -94,14 +94,14 @@ SAW_TEST("Struct Encoding"){
SAW_TEST("Union Encoding"){
using namespace saw;
{
auto root = heapMessageRoot<TestUnion>();
auto root = new_heap_message_root<TestUnion>();
auto builder = root.build();
auto test_uint = builder.init<"test_uint">();
test_uint.set(23);
ring_buffer buffer;
ProtoKelCodec codec;
proto_kel_codec codec;
error err = codec.encode<TestUnion>(builder.as_reader(), buffer);
@ -111,14 +111,14 @@ SAW_TEST("Union Encoding"){
== buffer.to_hex(), "Not equal encoding:\n"+buffer.to_hex());
}
{
auto root = heapMessageRoot<TestUnion>();
auto root = new_heap_message_root<TestUnion>();
auto builder = root.build();
auto test_string = builder.init<"test_string">();
test_string.set("foo");
ring_buffer buffer;
ProtoKelCodec codec;
proto_kel_codec codec;
error err = codec.encode<TestUnion>(builder.as_reader(), buffer);
@ -136,9 +136,9 @@ SAW_TEST("Tuple Decoding"){
ring_buffer buffer;
buffer.push(*buffer_raw, sizeof(buffer_raw));
ProtoKelCodec codec;
proto_kel_codec codec;
auto root = heapMessageRoot<TestTuple>();
auto root = new_heap_message_root<TestTuple>();
auto builder = root.build();
error err = codec.decode<TestTuple>(builder, buffer);
@ -159,9 +159,9 @@ SAW_TEST("Struct Decoding"){
ring_buffer buffer;
buffer.push(*buffer_raw, sizeof(buffer_raw));
ProtoKelCodec codec;
proto_kel_codec codec;
auto root = heapMessageRoot<TestStruct>();
auto root = new_heap_message_root<TestStruct>();
auto builder = root.build();
error err = codec.decode<TestStruct>(builder, buffer);
@ -182,16 +182,16 @@ SAW_TEST("Union Decoding"){
ring_buffer buffer;
buffer.push(*buffer_raw, sizeof(buffer_raw));
ProtoKelCodec codec;
proto_kel_codec codec;
auto root = heapMessageRoot<TestUnion>();
auto root = new_heap_message_root<TestUnion>();
auto builder = root.build();
auto reader = builder.as_reader();
error err = codec.decode<TestUnion>(builder, buffer);
SAW_EXPECT(!err.failed(), err.message());
SAW_EXPECT(reader.hasAlternative<"test_string">(), "Wrong union value");
SAW_EXPECT(reader.has_alternative<"test_string">(), "Wrong union value");
auto str_rd = reader.get<"test_string">();
SAW_EXPECT(str_rd.get() == "foo", "Wrong value: " + std::string{str_rd.get()});
}
@ -203,8 +203,8 @@ using TestArrayStruct = schema::Array<
SAW_TEST("Array Encoding"){
using namespace saw;
ProtoKelCodec codec;
auto root = heapMessageRoot<TestArrayStruct>();
proto_kel_codec codec;
auto root = new_heap_message_root<TestArrayStruct>();
auto builder = root.build(2);
auto one = builder.init(0);