Home | History | Annotate | Download | only in Support

Lines Matching refs:value_type

51 template <typename value_type>
52 inline value_type byte_swap(value_type value, endianness endian) {
59 template<typename value_type, endianness endian>
60 inline value_type byte_swap(value_type value) {
65 template <typename value_type, std::size_t alignment>
66 inline value_type read(const void *memory, endianness endian) {
67 value_type ret;
71 memory, (detail::PickAlignment<value_type, alignment>::value)),
72 sizeof(value_type));
73 return byte_swap<value_type>(ret, endian);
76 template<typename value_type,
79 inline value_type read(const void *memory) {
80 return read<value_type, alignment>(memory, endian);
85 template <typename value_type, std::size_t alignment, typename CharT>
86 inline value_type readNext(const CharT *&memory, endianness endian) {
87 value_type ret = read<value_type, alignment>(memory, endian);
88 memory += sizeof(value_type);
92 template<typename value_type, endianness endian, std::size_t alignment,
94 inline value_type readNext(const CharT *&memory) {
95 return readNext<value_type, alignment, CharT>(memory, endian);
99 template <typename value_type, std::size_t alignment>
100 inline void write(void *memory, value_type value, endianness endian) {
101 value = byte_swap<value_type>(value, endian);
103 memory, (detail::PickAlignment<value_type, alignment>::value)),
104 &value, sizeof(value_type));
107 template<typename value_type,
110 inline void write(void *memory, value_type value) {
111 write<value_type, alignment>(memory, value, endian);
114 template <typename value_type>
115 using make_unsigned_t = typename std::make_unsigned<value_type>::type;
119 template <typename value_type, endianness endian, std::size_t alignment>
120 inline value_type readAtBitAlignment(const void *memory, uint64_t startBit) {
123 return read<value_type, endian, alignment>(memory);
126 value_type val[2];
129 memory, (detail::PickAlignment<value_type, alignment>::value)),
130 sizeof(value_type) * 2);
131 val[0] = byte_swap<value_type, endian>(val[0]);
132 val[1] = byte_swap<value_type, endian>(val[1]);
135 make_unsigned_t<value_type> lowerVal = val[0] >> startBit;
137 make_unsigned_t<value_type> numBitsFirstVal =
138 (sizeof(value_type) * 8) - startBit;
139 lowerVal &= ((make_unsigned_t<value_type>)1 << numBitsFirstVal) - 1;
142 make_unsigned_t<value_type> upperVal =
143 val[1] & (((make_unsigned_t<value_type>)1 << startBit) - 1);
153 template <typename value_type, endianness endian, std::size_t alignment>
154 inline void writeAtBitAlignment(void *memory, value_type value,
158 write<value_type, endian, alignment>(memory, value);
161 value_type val[2];
164 memory, (detail::PickAlignment<value_type, alignment>::value)),
165 sizeof(value_type) * 2);
166 val[0] = byte_swap<value_type, endian>(val[0]);
167 val[1] = byte_swap<value_type, endian>(val[1]);
171 val[0] &= ((make_unsigned_t<value_type>)1 << startBit) - 1;
172 make_unsigned_t<value_type> numBitsFirstVal =
173 (sizeof(value_type) * 8) - startBit;
174 make_unsigned_t<value_type> lowerVal = value;
179 lowerVal &= (((make_unsigned_t<value_type>)1 << numBitsFirstVal) - 1);
187 val[1] &= ~(((make_unsigned_t<value_type>)1 << startBit) - 1);
189 make_unsigned_t<value_type> upperVal = value >> numBitsFirstVal;
191 upperVal &= ((make_unsigned_t<value_type>)1 << startBit) - 1;
195 val[0] = byte_swap<value_type, endian>(val[0]);
196 val[1] = byte_swap<value_type, endian>(val[1]);
198 memory, (detail::PickAlignment<value_type, alignment>::value)),
199 &val[0], sizeof(value_type) * 2);
207 template<typename value_type,
213 explicit packed_endian_specific_integral(value_type val) { *this = val; }
215 operator value_type() const {
216 return endian::read<value_type, endian, alignment>(
220 void operator=(value_type newValue) {
221 endian::write<value_type, endian, alignment>(
225 packed_endian_specific_integral &operator+=(value_type newValue) {
230 packed_endian_specific_integral &operator-=(value_type newValue) {
235 packed_endian_specific_integral &operator|=(value_type newValue) {
240 packed_endian_specific_integral &operator&=(value_type newValue) {
246 AlignedCharArray<PickAlignment<value_type, alignment>::value,
247 sizeof(value_type)> Value;
253 operator value_type() const {
254 return endian::read<value_type, endian, alignment>(Ptr);
257 void operator=(value_type NewValue) {
258 endian::write<value_type, endian, alignment>(Ptr, NewValue);