Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
3ae049fe
Commit
3ae049fe
authored
Dec 14, 2019
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove obsolete files
parent
afd89d5d
Changes
4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
0 additions
and
1418 deletions
+0
-1418
libcaf_core/caf/data_processor.hpp
libcaf_core/caf/data_processor.hpp
+0
-626
libcaf_core/caf/stream_deserializer.hpp
libcaf_core/caf/stream_deserializer.hpp
+0
-227
libcaf_core/caf/stream_serializer.hpp
libcaf_core/caf/stream_serializer.hpp
+0
-200
libcaf_core/caf/streambuf.hpp
libcaf_core/caf/streambuf.hpp
+0
-365
No files found.
libcaf_core/caf/data_processor.hpp
deleted
100644 → 0
View file @
afd89d5d
This diff is collapsed.
Click to expand it.
libcaf_core/caf/stream_deserializer.hpp
deleted
100644 → 0
View file @
afd89d5d
/******************************************************************************
* ____ _ _____ *
* / ___| / \ | ___| C++ *
* | | / _ \ | |_ Actor *
* | |___ / ___ \| _| Framework *
* \____/_/ \_|_| *
* *
* Copyright 2011-2018 Dominik Charousset *
* *
* Distributed under the terms and conditions of the BSD 3-Clause License or *
* (at your option) under the terms and conditions of the Boost Software *
* License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. *
* *
* If you did not receive a copy of the license files, see *
* http://opensource.org/licenses/BSD-3-Clause and *
* http://www.boost.org/LICENSE_1_0.txt. *
******************************************************************************/
#pragma once
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <iomanip>
#include <limits>
#include <sstream>
#include <stdexcept>
#include <string>
#include <type_traits>
#include "caf/deserializer.hpp"
#include "caf/detail/ieee_754.hpp"
#include "caf/detail/network_order.hpp"
#include "caf/logger.hpp"
#include "caf/sec.hpp"
namespace
caf
{
/// Implements the deserializer interface with a binary serialization protocol.
template
<
class
Streambuf
>
class
stream_deserializer
:
public
deserializer
{
using
streambuf_type
=
typename
std
::
remove_reference
<
Streambuf
>::
type
;
using
char_type
=
typename
streambuf_type
::
char_type
;
using
streambuf_base
=
std
::
basic_streambuf
<
char_type
>
;
using
streamsize
=
std
::
streamsize
;
static_assert
(
std
::
is_base_of
<
streambuf_base
,
streambuf_type
>::
value
,
"Streambuf must inherit from std::streambuf"
);
public:
template
<
class
...
Ts
>
explicit
stream_deserializer
(
actor_system
&
sys
,
Ts
&&
...
xs
)
:
deserializer
(
sys
),
streambuf_
(
std
::
forward
<
Ts
>
(
xs
)...)
{
}
template
<
class
...
Ts
>
explicit
stream_deserializer
(
execution_unit
*
ctx
,
Ts
&&
...
xs
)
:
deserializer
(
ctx
),
streambuf_
(
std
::
forward
<
Ts
>
(
xs
)...)
{
}
template
<
class
S
,
class
=
typename
std
::
enable_if
<
std
::
is_same
<
typename
std
::
remove_reference
<
S
>
::
type
,
typename
std
::
remove_reference
<
Streambuf
>::
type
>::
value
>::
type
>
explicit
stream_deserializer
(
S
&&
sb
)
:
deserializer
(
nullptr
),
streambuf_
(
std
::
forward
<
S
>
(
sb
))
{
}
error
begin_object
(
uint16_t
&
typenr
,
std
::
string
&
name
)
override
{
return
error
::
eval
([
&
]
{
return
apply_int
(
typenr
);
},
[
&
]
{
return
typenr
==
0
?
apply
(
name
)
:
error
{};
});
}
error
end_object
()
override
{
return
none
;
}
error
begin_sequence
(
size_t
&
num_elements
)
override
{
// We serialize a `size_t` always in 32-bit, to guarantee compatibility
// with 32-bit nodes in the network.
// TODO: protect with `if constexpr (sizeof(size_t) > sizeof(uint32_t))`
// when switching to C++17 and pass `num_elements` directly to
// `varbyte_decode` in the `else` case
uint32_t
x
;
auto
result
=
varbyte_decode
(
x
);
if
(
!
result
)
num_elements
=
static_cast
<
size_t
>
(
x
);
return
result
;
}
error
end_sequence
()
override
{
return
none
;
}
error
apply_raw
(
size_t
num_bytes
,
void
*
data
)
override
{
return
range_check
(
streambuf_
.
sgetn
(
reinterpret_cast
<
char_type
*>
(
data
),
static_cast
<
streamsize
>
(
num_bytes
)),
num_bytes
);
}
protected:
// Decode an unsigned integral type as variable-byte-encoded byte sequence.
template
<
class
T
>
error
varbyte_decode
(
T
&
x
)
{
static_assert
(
std
::
is_unsigned
<
T
>::
value
,
"T must be an unsigned type"
);
auto
n
=
0
;
x
=
0
;
uint8_t
low7
;
do
{
auto
c
=
streambuf_
.
sbumpc
();
using
traits
=
typename
streambuf_type
::
traits_type
;
if
(
traits
::
eq_int_type
(
c
,
traits
::
eof
()))
return
sec
::
end_of_stream
;
low7
=
static_cast
<
uint8_t
>
(
traits
::
to_char_type
(
c
));
x
|=
static_cast
<
T
>
((
low7
&
0x7F
))
<<
(
7
*
n
);
++
n
;
}
while
(
low7
&
0x80
);
return
none
;
}
error
apply_impl
(
int8_t
&
x
)
override
{
return
apply_raw
(
sizeof
(
int8_t
),
&
x
);
}
error
apply_impl
(
uint8_t
&
x
)
override
{
return
apply_raw
(
sizeof
(
uint8_t
),
&
x
);
}
error
apply_impl
(
int16_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
uint16_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
int32_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
uint32_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
int64_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
uint64_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
float
&
x
)
override
{
return
apply_float
(
x
);
}
error
apply_impl
(
double
&
x
)
override
{
return
apply_float
(
x
);
}
error
apply_impl
(
long
double
&
x
)
override
{
// The IEEE-754 conversion does not work for long double
// => fall back to string serialization (even though it sucks).
std
::
string
tmp
;
if
(
auto
err
=
apply
(
tmp
))
return
err
;
std
::
istringstream
iss
{
std
::
move
(
tmp
)};
iss
>>
x
;
return
none
;
}
error
apply_impl
(
std
::
string
&
x
)
override
{
size_t
str_size
;
if
(
auto
err
=
begin_sequence
(
str_size
))
return
err
;
x
.
resize
(
str_size
);
auto
s
=
static_cast
<
streamsize
>
(
str_size
);
auto
data
=
reinterpret_cast
<
char_type
*>
(
&
x
[
0
]);
if
(
auto
err
=
range_check
(
streambuf_
.
sgetn
(
data
,
s
),
str_size
))
return
err
;
return
end_sequence
();
}
error
apply_impl
(
std
::
u16string
&
x
)
override
{
size_t
str_size
;
return
error
::
eval
([
&
]
{
return
begin_sequence
(
str_size
);
},
[
&
]
{
return
fill_range_c
<
uint16_t
>
(
x
,
str_size
);
},
[
&
]
{
return
end_sequence
();
});
}
error
apply_impl
(
std
::
u32string
&
x
)
override
{
size_t
str_size
;
return
error
::
eval
([
&
]
{
return
begin_sequence
(
str_size
);
},
[
&
]
{
return
fill_range_c
<
uint32_t
>
(
x
,
str_size
);
},
[
&
]
{
return
end_sequence
();
});
}
error
range_check
(
std
::
streamsize
got
,
size_t
need
)
{
if
(
got
>=
0
&&
static_cast
<
size_t
>
(
got
)
==
need
)
return
none
;
CAF_LOG_ERROR
(
"range_check failed"
);
return
sec
::
end_of_stream
;
}
template
<
class
T
>
error
apply_int
(
T
&
x
)
{
typename
std
::
make_unsigned
<
T
>::
type
tmp
=
0
;
if
(
auto
err
=
apply_raw
(
sizeof
(
T
),
&
tmp
))
return
err
;
x
=
static_cast
<
T
>
(
detail
::
from_network_order
(
tmp
));
return
none
;
}
template
<
class
T
>
error
apply_float
(
T
&
x
)
{
typename
detail
::
ieee_754_trait
<
T
>::
packed_type
tmp
=
0
;
if
(
auto
err
=
apply_int
(
tmp
))
return
err
;
x
=
detail
::
unpack754
(
tmp
);
return
none
;
}
private:
Streambuf
streambuf_
;
};
}
// namespace caf
libcaf_core/caf/stream_serializer.hpp
deleted
100644 → 0
View file @
afd89d5d
/******************************************************************************
* ____ _ _____ *
* / ___| / \ | ___| C++ *
* | | / _ \ | |_ Actor *
* | |___ / ___ \| _| Framework *
* \____/_/ \_|_| *
* *
* Copyright 2011-2018 Dominik Charousset *
* *
* Distributed under the terms and conditions of the BSD 3-Clause License or *
* (at your option) under the terms and conditions of the Boost Software *
* License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. *
* *
* If you did not receive a copy of the license files, see *
* http://opensource.org/licenses/BSD-3-Clause and *
* http://www.boost.org/LICENSE_1_0.txt. *
******************************************************************************/
#pragma once
#include <cstddef>
#include <cstdint>
#include <iomanip>
#include <limits>
#include <sstream>
#include <streambuf>
#include <string>
#include <type_traits>
#include "caf/config.hpp"
#include "caf/detail/ieee_754.hpp"
#include "caf/detail/network_order.hpp"
#include "caf/sec.hpp"
#include "caf/serializer.hpp"
#include "caf/streambuf.hpp"
namespace
caf
{
/// Implements the serializer interface with a binary serialization protocol.
template
<
class
Streambuf
>
class
stream_serializer
:
public
serializer
{
using
streambuf_type
=
typename
std
::
remove_reference
<
Streambuf
>::
type
;
using
char_type
=
typename
streambuf_type
::
char_type
;
using
streambuf_base
=
std
::
basic_streambuf
<
char_type
>
;
static_assert
(
std
::
is_base_of
<
streambuf_base
,
streambuf_type
>::
value
,
"Streambuf must inherit from std::streambuf"
);
public:
template
<
class
...
Ts
>
explicit
stream_serializer
(
actor_system
&
sys
,
Ts
&&
...
xs
)
:
serializer
(
sys
),
streambuf_
{
std
::
forward
<
Ts
>
(
xs
)...}
{
}
template
<
class
...
Ts
>
explicit
stream_serializer
(
execution_unit
*
ctx
,
Ts
&&
...
xs
)
:
serializer
(
ctx
),
streambuf_
{
std
::
forward
<
Ts
>
(
xs
)...}
{
}
template
<
class
S
,
class
=
typename
std
::
enable_if
<
std
::
is_same
<
typename
std
::
remove_reference
<
S
>
::
type
,
typename
std
::
remove_reference
<
Streambuf
>::
type
>::
value
>::
type
>
explicit
stream_serializer
(
S
&&
sb
)
:
serializer
(
nullptr
),
streambuf_
(
std
::
forward
<
S
>
(
sb
))
{
}
error
begin_object
(
uint16_t
&
typenr
,
std
::
string
&
name
)
override
{
return
error
::
eval
([
&
]
{
return
apply
(
typenr
);
},
[
&
]
{
return
typenr
==
0
?
apply
(
name
)
:
error
{};
});
}
error
end_object
()
override
{
return
none
;
}
error
begin_sequence
(
size_t
&
list_size
)
override
{
// TODO: protect with `if constexpr (sizeof(size_t) > sizeof(uint32_t))`
// when switching to C++17
CAF_ASSERT
(
list_size
<=
std
::
numeric_limits
<
uint32_t
>::
max
());
// Serialize a `size_t` always in 32-bit, to guarantee compatibility with
// 32-bit nodes in the network.
return
varbyte_encode
(
static_cast
<
uint32_t
>
(
list_size
));
}
error
end_sequence
()
override
{
return
none
;
}
error
apply_raw
(
size_t
num_bytes
,
void
*
data
)
override
{
auto
ssize
=
static_cast
<
std
::
streamsize
>
(
num_bytes
);
auto
n
=
streambuf_
.
sputn
(
reinterpret_cast
<
char_type
*>
(
data
),
ssize
);
if
(
n
!=
ssize
)
return
sec
::
end_of_stream
;
return
none
;
}
protected:
// Encode an unsigned integral type as variable-byte sequence.
template
<
class
T
>
error
varbyte_encode
(
T
x
)
{
static_assert
(
std
::
is_unsigned
<
T
>::
value
,
"T must be an unsigned type"
);
// For 64-bit values, the encoded representation cannot get larger than 10
// bytes. A scratch space of 16 bytes suffices as upper bound.
uint8_t
buf
[
16
];
auto
i
=
buf
;
while
(
x
>
0x7f
)
{
*
i
++
=
(
static_cast
<
uint8_t
>
(
x
)
&
0x7f
)
|
0x80
;
x
>>=
7
;
}
*
i
++
=
static_cast
<
uint8_t
>
(
x
)
&
0x7f
;
auto
res
=
streambuf_
.
sputn
(
reinterpret_cast
<
char_type
*>
(
buf
),
static_cast
<
std
::
streamsize
>
(
i
-
buf
));
if
(
res
!=
(
i
-
buf
))
return
sec
::
end_of_stream
;
return
none
;
}
error
apply_impl
(
int8_t
&
x
)
override
{
return
apply_raw
(
sizeof
(
int8_t
),
&
x
);
}
error
apply_impl
(
uint8_t
&
x
)
override
{
return
apply_raw
(
sizeof
(
uint8_t
),
&
x
);
}
error
apply_impl
(
int16_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
uint16_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
int32_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
uint32_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
int64_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
uint64_t
&
x
)
override
{
return
apply_int
(
x
);
}
error
apply_impl
(
float
&
x
)
override
{
return
apply_int
(
detail
::
pack754
(
x
));
}
error
apply_impl
(
double
&
x
)
override
{
return
apply_int
(
detail
::
pack754
(
x
));
}
error
apply_impl
(
long
double
&
x
)
override
{
// The IEEE-754 conversion does not work for long double
// => fall back to string serialization (event though it sucks).
std
::
ostringstream
oss
;
oss
<<
std
::
setprecision
(
std
::
numeric_limits
<
long
double
>::
digits
)
<<
x
;
auto
tmp
=
oss
.
str
();
return
apply_impl
(
tmp
);
}
error
apply_impl
(
std
::
string
&
x
)
override
{
auto
str_size
=
x
.
size
();
auto
data
=
const_cast
<
char
*>
(
x
.
c_str
());
return
error
::
eval
([
&
]
{
return
begin_sequence
(
str_size
);
},
[
&
]
{
return
apply_raw
(
x
.
size
(),
data
);
},
[
&
]
{
return
end_sequence
();
});
}
error
apply_impl
(
std
::
u16string
&
x
)
override
{
auto
str_size
=
x
.
size
();
return
error
::
eval
([
&
]
{
return
begin_sequence
(
str_size
);
},
[
&
]
{
return
consume_range_c
<
uint16_t
>
(
x
);
},
[
&
]
{
return
end_sequence
();
});
}
error
apply_impl
(
std
::
u32string
&
x
)
override
{
auto
str_size
=
x
.
size
();
return
error
::
eval
([
&
]
{
return
begin_sequence
(
str_size
);
},
[
&
]
{
return
consume_range_c
<
uint32_t
>
(
x
);
},
[
&
]
{
return
end_sequence
();
});
}
template
<
class
T
>
error
apply_int
(
T
x
)
{
using
unsigned_type
=
typename
std
::
make_unsigned
<
T
>::
type
;
auto
y
=
detail
::
to_network_order
(
static_cast
<
unsigned_type
>
(
x
));
return
apply_raw
(
sizeof
(
T
),
&
y
);
}
private:
Streambuf
streambuf_
;
};
}
// namespace caf
libcaf_core/caf/streambuf.hpp
deleted
100644 → 0
View file @
afd89d5d
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment