31#ifndef ETL_BYTE_STREAM_INCLUDED
32#define ETL_BYTE_STREAM_INCLUDED
117 template <
typename T,
size_t Size>
132 *pcurrent++ = value ? 1 : 0;
153 template <
typename T>
163 template <
typename T>
180 template <
typename T>
186 while (itr != range.end())
196 template <
typename T>
213 template <
typename T>
217 while (length-- != 0
U)
227 template <
typename T>
246 template <
typename T>
264 pcurrent = pdata +
n;
384 return etl::distance(pdata, pcurrent);
392 return stream_length;
398 template <
typename T>
433 return stream_endianness;
441 template <
typename T>
443 to_bytes(
const T value)
445 *pcurrent =
static_cast<char>(value);
450 template <
typename T>
452 to_bytes(
const T value)
454 const char* pv =
reinterpret_cast<const char*
>(&value);
455 copy_value(pv, pcurrent,
sizeof(T));
468 void copy_value(
const char* source,
char* destination,
size_t length)
const
470 const etl::endian platform_endianness = etl::endianness::value();
472 if (stream_endianness == platform_endianness)
474 etl::copy(source, source + length, destination);
478 etl::reverse_copy(source, source + length, destination);
484 const size_t stream_length;
486 callback_type callback;
547 template <
typename T,
size_t Size>
559 template <
typename T,
size_t Size>
571 template <
typename T>
581 template <
typename T>
599 template <
typename T>
605 const char* pend = pcurrent + (
n *
sizeof(
T));
607 result =
etl::span<const T>(
reinterpret_cast<const T*
>(pcurrent),
reinterpret_cast<const T*
>(pend));
616 template <
typename T>
634 template <
typename T>
651 template <
typename T>
667 template <
typename T>
673 for (
size_t i = 0;
i < length; ++
i)
684 template <
typename T>
702 template <
typename T>
707 pcurrent += (
n *
sizeof(
T));
721 pcurrent = pdata +
n;
793 return stream_length;
799 template <
typename T>
802 size_t used = etl::distance(pdata, pcurrent);
804 return (stream_length -
used) /
sizeof(
T);
820 template <
typename T>
824 return static_cast<T>(*pcurrent++);
828 template <
typename T>
834 char* pv =
reinterpret_cast<char*
>(&value);
835 copy_value(pcurrent, pv,
sizeof(T));
836 pcurrent +=
sizeof(T);
842 void copy_value(
const char* source,
char* destination,
size_t length)
const
844 const etl::endian platform_endianness = etl::endianness::value();
846 if (stream_endianness == platform_endianness)
848 etl::copy(source, source + length, destination);
852 etl::reverse_copy(source, source + length, destination);
856 const char*
const pdata;
857 const char* pcurrent;
858 const size_t stream_length;
867 template <
typename T>
870 stream.write_unchecked(value);
876 template <
typename T>
879 return stream.write(value);
887 template <
typename T>
890 return stream.read_unchecked<
T>();
896 template <
typename T>
Definition byte_stream.h:494
const_iterator cbegin() const
Returns start of the stream.
Definition byte_stream.h:743
byte_stream_reader(etl::span< const char > span_, etl::endian stream_endianness_)
Construct from span.
Definition byte_stream.h:514
bool empty() const
Returns true if the byte stream is empty.
Definition byte_stream.h:783
etl::enable_if< sizeof(T)==1U, etl::optional< etl::span< constT > > >::type read(size_t n)
Read a byte range from the stream.
Definition byte_stream.h:618
etl::enable_if< sizeof(T)==1U, etl::span< constT > >::type read_unchecked(size_t n)
Read a byte range from the stream.
Definition byte_stream.h:601
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, etl::optional< etl::span< constT > > >::type read(T *start, size_t length)
Read a range of T from the stream.
Definition byte_stream.h:686
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, etl::span< constT > >::type read_unchecked(etl::span< T > range)
Read a range of T from the stream.
Definition byte_stream.h:636
byte_stream_reader(const T(&begin_)[Size], etl::endian stream_endianness_)
Construct from const array.
Definition byte_stream.h:560
const_iterator begin() const
Returns start of the stream.
Definition byte_stream.h:727
const_iterator cend() const
Returns end of the stream.
Definition byte_stream.h:751
etl::span< const char > used_data() const
Returns a span of the used portion of the stream.
Definition byte_stream.h:759
size_t available_bytes() const
The number of bytes left in the stream.
Definition byte_stream.h:810
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, etl::optional< etl::span< constT > > >::type read(etl::span< T > range)
Read a range of T from the stream.
Definition byte_stream.h:653
size_t available() const
The number of T left in the stream.
Definition byte_stream.h:800
byte_stream_reader(etl::span< char > span_, etl::endian stream_endianness_)
Construct from span.
Definition byte_stream.h:503
size_t size_bytes() const
Returns the number of bytes used in the stream.
Definition byte_stream.h:791
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, etl::span< constT > >::type read_unchecked(T *start, size_t length)
Read a range of T from the stream.
Definition byte_stream.h:669
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, T >::type read_unchecked()
Read a value from the stream.
Definition byte_stream.h:573
etl::span< const char > data() const
Returns a span of whole the stream.
Definition byte_stream.h:775
etl::span< const char > free_data() const
Returns a span of the free portion of the stream.
Definition byte_stream.h:767
bool skip(size_t n)
Definition byte_stream.h:703
void restart(size_t n=0U)
Sets the index back to the position in the stream. Default = 0.
Definition byte_stream.h:719
byte_stream_reader(const void *begin_, size_t length_, etl::endian stream_endianness_)
Construct from begin and length.
Definition byte_stream.h:536
byte_stream_reader(T(&begin_)[Size], etl::endian stream_endianness_)
Construct from array.
Definition byte_stream.h:548
const_iterator end() const
Returns end of the stream.
Definition byte_stream.h:735
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, etl::optional< T > >::type read()
Read a value from the stream.
Definition byte_stream.h:583
byte_stream_reader(const void *begin_, const void *end_, etl::endian stream_endianness_)
Construct from range.
Definition byte_stream.h:525
Encodes a byte stream.
Definition byte_stream.h:58
byte_stream_writer(etl::span< unsigned char > span_, etl::endian stream_endianness_, callback_type callback_=callback_type())
Construct from span.
Definition byte_stream.h:81
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, void >::type write_unchecked(const T *start, size_t length)
Write a range of T to the stream.
Definition byte_stream.h:215
const_iterator cbegin() const
Returns start of the stream.
Definition byte_stream.h:302
etl::span< char > data()
Returns a span of whole the stream.
Definition byte_stream.h:350
const_iterator end() const
Returns end of the stream.
Definition byte_stream.h:294
etl::span< char > free_data()
Returns a span of the free portion of the stream.
Definition byte_stream.h:334
byte_stream_writer(void *begin_, size_t length_, etl::endian stream_endianness_, callback_type callback_=callback_type())
Construct from begin and length.
Definition byte_stream.h:105
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, bool >::type write(const etl::span< T > &range)
Write a range of T to the stream.
Definition byte_stream.h:198
iterator begin()
Returns start of the stream.
Definition byte_stream.h:270
byte_stream_writer(T(&begin_)[Size], etl::endian stream_endianness_, callback_type callback_=callback_type())
Construct from array.
Definition byte_stream.h:118
void restart(size_t n=0U)
Sets the index back to the position in the stream. Default = 0.
Definition byte_stream.h:262
byte_stream_writer(void *begin_, void *end_, etl::endian stream_endianness_, callback_type callback_=callback_type())
Construct from range.
Definition byte_stream.h:93
bool write(bool value)
Writes a boolean to the stream.
Definition byte_stream.h:138
void write_unchecked(bool value)
Writes a boolean to the stream.
Definition byte_stream.h:130
etl::endian get_endianness() const
Gets the endianness of the stream.
Definition byte_stream.h:431
void set_callback(callback_type callback_)
Sets the function to call after every write.
Definition byte_stream.h:415
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, void >::type write_unchecked(T value)
Write a value to the stream.
Definition byte_stream.h:155
etl::span< char > used_data()
Returns a span of the used portion of the stream.
Definition byte_stream.h:318
iterator end()
Returns end of the stream.
Definition byte_stream.h:286
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, bool >::type write(const T *start, size_t length)
Write a range of T to the stream.
Definition byte_stream.h:229
bool empty() const
Returns true if the byte stream is empty.
Definition byte_stream.h:374
byte_stream_writer(etl::span< char > span_, etl::endian stream_endianness_, callback_type callback_=callback_type())
Construct from span.
Definition byte_stream.h:69
const_iterator cend() const
Returns end of the stream.
Definition byte_stream.h:310
bool skip(size_t n)
Definition byte_stream.h:247
size_t available_bytes() const
The number of bytes left in the stream.
Definition byte_stream.h:407
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, bool >::type write(T value)
Write a value to the stream.
Definition byte_stream.h:165
size_t available() const
The number of T left in the stream.
Definition byte_stream.h:399
etl::span< const char > data() const
Returns a span of whole the stream.
Definition byte_stream.h:358
etl::span< const char > used_data() const
Returns a span of the used portion of the stream.
Definition byte_stream.h:326
callback_type get_callback() const
Gets the function to call after every write.
Definition byte_stream.h:423
etl::enable_if< etl::is_integral< T >::value||etl::is_floating_point< T >::value, void >::type write_unchecked(const etl::span< T > &range)
Write a range of T to the stream.
Definition byte_stream.h:182
size_t capacity() const
Returns the maximum number of bytes in the stream.
Definition byte_stream.h:390
etl::span< const char > free_data() const
Returns a span of the free portion of the stream.
Definition byte_stream.h:342
const_iterator begin() const
Returns start of the stream.
Definition byte_stream.h:278
size_t size_bytes() const
Returns the number of bytes used in the stream.
Definition byte_stream.h:382
bool full() const
Returns true if the byte stream index has reached the end.
Definition byte_stream.h:366
Declaration.
Definition delegate_cpp03.h:191
Definition optional.h:1227
Definition endianness.h:100
enable_if
Definition type_traits_generator.h:1186
is_floating_point
Definition type_traits_generator.h:1026
bitset_ext
Definition absolute.h:38
etl::optional< T > read(etl::bit_stream_reader &stream)
Read a checked type from a stream.
Definition bit_stream.h:1377
void write_unchecked(etl::bit_stream_writer &stream, bool value)
Definition bit_stream.h:986
T read_unchecked(etl::bit_stream_reader &stream)
Read an unchecked type from a stream.
Definition bit_stream.h:1362
bool write(etl::bit_stream_writer &stream, bool value)
Definition bit_stream.h:995
pair holds two objects of arbitrary type
Definition utility.h:164