Merge "Flattenable: switch from assignment to memcpy()." am: b2356a6993 am: bb276d8555
am: 9f106bece8
Change-Id: I43e4e5c6bb0aa1fd23a1d0d9776c9e2c8028527e
This commit is contained in:
commit
7bc0052ff1
1 changed files with 9 additions and 2 deletions
|
|
@ -19,10 +19,13 @@
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <utils/Errors.h>
|
#include <utils/Errors.h>
|
||||||
#include <utils/Debug.h>
|
#include <utils/Debug.h>
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -60,14 +63,18 @@ public:
|
||||||
// write a POD structure
|
// write a POD structure
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void write(void*& buffer, size_t& size, const T& value) {
|
static void write(void*& buffer, size_t& size, const T& value) {
|
||||||
*static_cast<T*>(buffer) = value;
|
static_assert(std::is_trivially_copyable<T>::value,
|
||||||
|
"Cannot flatten a non-trivially-copyable type");
|
||||||
|
memcpy(buffer, &value, sizeof(T));
|
||||||
advance(buffer, size, sizeof(T));
|
advance(buffer, size, sizeof(T));
|
||||||
}
|
}
|
||||||
|
|
||||||
// read a POD structure
|
// read a POD structure
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void read(void const*& buffer, size_t& size, T& value) {
|
static void read(void const*& buffer, size_t& size, T& value) {
|
||||||
value = *static_cast<T const*>(buffer);
|
static_assert(std::is_trivially_copyable<T>::value,
|
||||||
|
"Cannot unflatten a non-trivially-copyable type");
|
||||||
|
memcpy(&value, buffer, sizeof(T));
|
||||||
advance(buffer, size, sizeof(T));
|
advance(buffer, size, sizeof(T));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue