1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#pragma once
#include "data.h"
namespace saw {
namespace encode {
struct KelSimple {};
}
template<typename T>
class data<T, encode::KelSimple> {
private:
ring_buffer buffer_;
public:
data() = default;
buffer& get_buffer(){
return buffer;
}
};
namespace impl {
template<typename Schema, typename FromEnc>
class kelsimple_encode {
static_assert(always_false<Schema, FromEnc>, "This schema type is not being handled by the kelsimple encoding.");
};
template<typename T, size_t N, typename Schema, typename FromEnc>
struct kelsimple_encode<schema::Primitive<T,N>, FromEnc> {
static error_or<void> encode(const data<schema::Primitive<T,N>, FromEnc>& from, buffer& to){
return void_t{};
}
};
}
template<typename Schema>
class codec<Schema, encode::KelSimple> {
public:
struct config {
size_t depth = 16;
size_t length = 1024;
};
private:
config cfg_;
public:
codec() = default;
SAW_FORBID_COPY(codec);
SAW_DEFAULT_MOVE(codec);
template<typename FromEnc>
error_or<void> encode(const data<Schema, FromEnc>& from_enc, data<Schema, encode::KelSimple>& to_enc){
buffer_view buff_v{to_enc.get_buffer()};
auto eov = kelsimple_encode::encode(from_env, buff_v);
return void_t{};
}
};
}
|