16 #ifndef INCLUDE_NN_NLIB_MSGPACK_MPDIRECTWRITER_H_ 17 #define INCLUDE_NN_NLIB_MSGPACK_MPDIRECTWRITER_H_ 73 #ifdef NLIB_LITTLE_ENDIAN 79 #ifdef NLIB_LITTLE_ENDIAN 85 #ifdef NLIB_LITTLE_ENDIAN 94 #define NLIB_CHK_(p, n, pend) if (NLIB_UNLIKELY((p) + (n) > (pend))) { \ 95 NLIB_ASSERT((p) + (n) <= (pend)); \ 100 NLIB_CHK_(p, 2, pend);
108 NLIB_CHK_(p, 3, pend);
115 NLIB_CHK_(p, 5, pend);
122 NLIB_CHK_(p, 9, pend);
129 NLIB_CHK_(p, 2, pend);
136 NLIB_CHK_(p, 3, pend);
138 EncU16(p + 1, static_cast<uint16_t>(val));
143 NLIB_CHK_(p, 5, pend);
145 EncU32(p + 1, static_cast<uint32_t>(val));
150 NLIB_CHK_(p, 9, pend);
152 EncU64(p + 1, static_cast<uint64_t>(val));
157 NLIB_CHK_(p, 1, pend);
163 NLIB_CHK_(p, 1, pend);
169 NLIB_CHK_(p, 5, pend);
176 EncU32(p + 1, tmp.u32);
181 NLIB_CHK_(p, 9, pend);
188 EncU64(p + 1, tmp.u64);
195 NLIB_CHK_(p, 1, pend);
198 }
else if (len < 256U) {
199 NLIB_CHK_(p, 2, pend);
203 }
else if (len < 65536U) {
204 NLIB_CHK_(p, 3, pend);
206 EncU16(p + 1, static_cast<uint16_t>(len));
209 NLIB_CHK_(p, 5, pend);
219 NLIB_CHK_(p, 1 + len, pend);
223 }
else if (len < 256U) {
224 NLIB_CHK_(p, 2 + len, pend);
229 }
else if (len < 65536U) {
230 NLIB_CHK_(p, 3 + len, pend);
232 EncU16(p + 1, static_cast<uint16_t>(len));
236 NLIB_CHK_(p, 5 + len, pend);
246 return WriteString(p, pend, str, static_cast<uint32_t>(
nlib_strlen(str)));
251 NLIB_CHK_(p, 2, pend);
255 }
else if (n < 65536U) {
256 NLIB_CHK_(p, 3, pend);
258 EncU16(p + 1, static_cast<uint16_t>(n));
261 NLIB_CHK_(p, 5, pend);
271 NLIB_CHK_(p, 2 + n, pend);
276 }
else if (n < 65536U) {
277 NLIB_CHK_(p, 3 + n, pend);
279 EncU16(p + 1, static_cast<uint16_t>(n));
283 NLIB_CHK_(p, 5 + n, pend);
296 NLIB_CHK_(p, 2, pend);
301 NLIB_CHK_(p, 2, pend);
306 NLIB_CHK_(p, 2, pend);
311 NLIB_CHK_(p, 2, pend);
316 NLIB_CHK_(p, 2, pend);
321 NLIB_CHK_(p, 3 + n, pend);
327 }
else if (n < 65536U) {
328 NLIB_CHK_(p, 4, pend);
330 EncU16(p + 1, static_cast<uint16_t>(n));
334 NLIB_CHK_(p, 6, pend);
347 NLIB_CHK_(p, 3, pend);
353 NLIB_CHK_(p, 4, pend);
360 NLIB_CHK_(p, 6, pend);
366 NLIB_CHK_(p, 10, pend);
372 NLIB_CHK_(p, 18, pend);
378 NLIB_CHK_(p, 3 + n, pend);
385 }
else if (n < 65536U) {
386 NLIB_CHK_(p, 4 + n, pend);
388 EncU16(p + 1, static_cast<uint16_t>(n));
393 NLIB_CHK_(p, 6 + n, pend);
405 NLIB_CHK_(p, 1, pend);
408 }
else if (count < 65536U) {
409 NLIB_CHK_(p, 3, pend);
411 EncU16(p + 1, static_cast<uint16_t>(count));
414 NLIB_CHK_(p, 5, pend);
416 EncU32(p + 1, count);
424 NLIB_CHK_(p, 1, pend);
427 }
else if (count < 65536U) {
428 NLIB_CHK_(p, 3, pend);
430 EncU16(p + 1, static_cast<uint16_t>(count));
433 NLIB_CHK_(p, 5, pend);
435 EncU32(p + 1, count);
443 NLIB_CHK_(p, 1, pend);
447 return WriteUint8(p, pend, static_cast<uint8_t>(val));
454 NLIB_CHK_(p, 1, pend);
457 }
else if (val < 256U) {
458 return WriteUint8(p, pend, static_cast<uint8_t>(val));
460 return WriteUint16(p, pend, static_cast<uint16_t>(val));
468 NLIB_CHK_(p, 1, pend);
472 return WriteUint8(p, pend, static_cast<uint8_t>(val));
474 }
else if (val < 65536U) {
475 return WriteUint16(p, pend, static_cast<uint16_t>(val));
477 return WriteUint32(p, pend, val);
483 if (val < 0x100000000ULL) {
484 return WriteUnsignedInt(p, pend, static_cast<uint32_t>(val));
486 return WriteUint64(p, pend, val);
492 return WriteInt8(p, pend, static_cast<int8_t>(val));
494 NLIB_CHK_(p, 1, pend);
502 if (val < INT8_MIN) {
503 return WriteInt16(p, pend, static_cast<int16_t>(val));
504 }
else if (val < -32) {
505 return WriteInt8(p, pend, static_cast<int8_t>(val));
507 NLIB_CHK_(p, 1, pend);
512 return WriteUnsignedInt(p, pend, static_cast<uint16_t>(val));
518 if (val < INT8_MIN) {
519 if (val < INT16_MIN) {
520 return WriteInt32(p, pend, val);
522 return WriteInt16(p, pend, static_cast<int16_t>(val));
524 }
else if (val < -32) {
525 return WriteInt8(p, pend, static_cast<int8_t>(val));
527 NLIB_CHK_(p, 1, pend);
532 return WriteUnsignedInt(p, pend, static_cast<uint32_t>(val));
538 if (val < INT32_MIN) {
539 return WriteInt64(p, pend, val);
541 return WriteInt(p, pend, static_cast<int32_t>(val));
544 return WriteUnsignedInt(p, pend, static_cast<uint64_t>(val));
551 uint64_t data64 = (
static_cast<uint64_t
>(nsec) << 34) |
static_cast<uint64_t
>(sec);
552 if (data64 < 0x100000000ULL) {
554 NLIB_CHK_(p, 6, pend);
557 EncU32(p + 2, static_cast<uint32_t>(data64));
561 NLIB_CHK_(p, 10, pend);
564 EncU64(p + 2, data64);
569 NLIB_CHK_(p, 15, pend);
573 EncU32(p + 3, static_cast<uint32_t>(nsec));
574 EncU64(p + 7, static_cast<uint64_t>(sec));
582 NLIB_TO_SEC_NSEC(sec, nsec, val);
583 return WriteTimestamp(p, pend, sec, nsec);
590 #endif // INCLUDE_NN_NLIB_MSGPACK_MPDIRECTWRITER_H_
#define NLIB_NOEXCEPT
Defines noexcept geared to the environment, or the equivalent.
A file that contains the configuration information for each development environment.
Defines various static member functions for directly writing MessagePack into memory.