Lines Matching refs:value_type

50 template <typename value_type>
51 inline value_type byte_swap(value_type value, endianness endian) {
58 template<typename value_type, endianness endian>
59 inline value_type byte_swap(value_type value) {
64 template <typename value_type, std::size_t alignment>
65 inline value_type read(const void *memory, endianness endian) {
66 value_type ret;
70 memory, (detail::PickAlignment<value_type, alignment>::value)),
71 sizeof(value_type));
72 return byte_swap<value_type>(ret, endian);
75 template<typename value_type,
78 inline value_type read(const void *memory) {
79 return read<value_type, alignment>(memory, endian);
84 template <typename value_type, std::size_t alignment, typename CharT>
85 inline value_type readNext(const CharT *&memory, endianness endian) {
86 value_type ret = read<value_type, alignment>(memory, endian);
87 memory += sizeof(value_type);
91 template<typename value_type, endianness endian, std::size_t alignment,
93 inline value_type readNext(const CharT *&memory) {
94 return readNext<value_type, alignment, CharT>(memory, endian);
98 template <typename value_type, std::size_t alignment>
99 inline void write(void *memory, value_type value, endianness endian) {
100 value = byte_swap<value_type>(value, endian);
102 memory, (detail::PickAlignment<value_type, alignment>::value)),
103 &value, sizeof(value_type));
106 template<typename value_type,
109 inline void write(void *memory, value_type value) {
110 write<value_type, alignment>(memory, value, endian);
113 template <typename value_type>
114 using make_unsigned_t = typename std::make_unsigned<value_type>::type;
118 template <typename value_type, endianness endian, std::size_t alignment>
119 inline value_type readAtBitAlignment(const void *memory, uint64_t startBit) {
122 return read<value_type, endian, alignment>(memory);
125 value_type val[2];
128 memory, (detail::PickAlignment<value_type, alignment>::value)),
129 sizeof(value_type) * 2);
130 val[0] = byte_swap<value_type, endian>(val[0]);
131 val[1] = byte_swap<value_type, endian>(val[1]);
134 make_unsigned_t<value_type> lowerVal = val[0] >> startBit;
136 make_unsigned_t<value_type> numBitsFirstVal =
137 (sizeof(value_type) * 8) - startBit;
138 lowerVal &= ((make_unsigned_t<value_type>)1 << numBitsFirstVal) - 1;
141 make_unsigned_t<value_type> upperVal =
142 val[1] & (((make_unsigned_t<value_type>)1 << startBit) - 1);
152 template <typename value_type, endianness endian, std::size_t alignment>
153 inline void writeAtBitAlignment(void *memory, value_type value,
157 write<value_type, endian, alignment>(memory, value);
160 value_type val[2];
163 memory, (detail::PickAlignment<value_type, alignment>::value)),
164 sizeof(value_type) * 2);
165 val[0] = byte_swap<value_type, endian>(val[0]);
166 val[1] = byte_swap<value_type, endian>(val[1]);
170 val[0] &= ((make_unsigned_t<value_type>)1 << startBit) - 1;
171 make_unsigned_t<value_type> numBitsFirstVal =
172 (sizeof(value_type) * 8) - startBit;
173 make_unsigned_t<value_type> lowerVal = value;
178 lowerVal &= (((make_unsigned_t<value_type>)1 << numBitsFirstVal) - 1);
186 val[1] &= ~(((make_unsigned_t<value_type>)1 << startBit) - 1);
188 make_unsigned_t<value_type> upperVal = value >> numBitsFirstVal;
190 upperVal &= ((make_unsigned_t<value_type>)1 << startBit) - 1;
194 val[0] = byte_swap<value_type, endian>(val[0]);
195 val[1] = byte_swap<value_type, endian>(val[1]);
197 memory, (detail::PickAlignment<value_type, alignment>::value)),
198 &val[0], sizeof(value_type) * 2);
209 using value_type = ValueType;
215 explicit packed_endian_specific_integral(value_type val) { *this = val; }
217 operator value_type() const {
218 return endian::read<value_type, endian, alignment>(
222 void operator=(value_type newValue) {
223 endian::write<value_type, endian, alignment>(
227 packed_endian_specific_integral &operator+=(value_type newValue) {
232 packed_endian_specific_integral &operator-=(value_type newValue) {
237 packed_endian_specific_integral &operator|=(value_type newValue) {
242 packed_endian_specific_integral &operator&=(value_type newValue) {
249 alignas(ALIGN) char buffer[sizeof(value_type)];
256 operator value_type() const {
257 return endian::read<value_type, endian, alignment>(Ptr);
260 void operator=(value_type NewValue) {
261 endian::write<value_type, endian, alignment>(Ptr, NewValue);