27 if (pointers.empty()) {
32 std::sort(pointers.begin(), pointers.end(), [](
const auto&
a,
const auto&
b) { return a.first < b.first; });
34 for (
size_t i = 1; i < pointers.size(); ++i) {
36 auto last_end = pointers[i - 1].first + pointers[i - 1].second;
37 if (last_end > pointers[i].first) {
42 if (__aligned_for<T>(last_end) < pointers[i].first) {
43 return "Gap in " +
msgpack_schema_name(*obj) +
" MSGPACK_FIELDS() params detected before member #" +
49 uintptr_t t_start =
reinterpret_cast<uintptr_t
>(obj);
50 uintptr_t t_end = t_start +
sizeof(T);
51 if (pointers.front().first < t_start || pointers.back().first + pointers.back().second > t_end) {
52 return "Some " +
msgpack_schema_name(*obj) +
" MSGPACK_FIELDS() params don't exist in object!";
56 size_t start = (size_t)obj;
57 size_t end = (size_t)obj;
58 for (
auto [ptr, size] : pointers) {
61 size_t total_size = end - start;
62 if (__aligned_for<T>(total_size) <
sizeof(T)) {
63 return "Incomplete " +
msgpack_schema_name(*obj) +
" MSGPACK_FIELDS() params! Not all of object specified.";