MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / write_header

Function write_header

lite/example/cpp_example/npy.h:453–494  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

451}
452
453inline void write_header(
454 std::ostream& out, const std::string& descr, bool fortran_order,
455 const std::vector<ndarray_len_t>& shape_v) {
456 std::string header_dict = write_header_dict(descr, fortran_order, shape_v);
457
458 size_t length = magic_string_length + 2 + 2 + header_dict.length() + 1;
459
460 unsigned char version[2] = {1, 0};
461 if (length >= 255 * 255) {
462 length = magic_string_length + 2 + 4 + header_dict.length() + 1;
463 version[0] = 2;
464 version[1] = 0;
465 }
466 size_t padding_len = 16 - length % 16;
467 std::string padding(padding_len, ' ');
468
469 // write magic
470 write_magic(out, version[0], version[1]);
471
472 // write header length
473 if (version[0] == 1 && version[1] == 0) {
474 char header_len_le16[2];
475 uint16_t header_len =
476 static_cast<uint16_t>(header_dict.length() + padding.length() + 1);
477
478 header_len_le16[0] = (header_len >> 0) & 0xff;
479 header_len_le16[1] = (header_len >> 8) & 0xff;
480 out.write(reinterpret_cast<char*>(header_len_le16), 2);
481 } else {
482 char header_len_le32[4];
483 uint32_t header_len =
484 static_cast<uint32_t>(header_dict.length() + padding.length() + 1);
485
486 header_len_le32[0] = (header_len >> 0) & 0xff;
487 header_len_le32[1] = (header_len >> 8) & 0xff;
488 header_len_le32[2] = (header_len >> 16) & 0xff;
489 header_len_le32[3] = (header_len >> 24) & 0xff;
490 out.write(reinterpret_cast<char*>(header_len_le32), 4);
491 }
492
493 out << header_dict << padding << '\n';
494}
495
496inline std::string read_header(std::istream& istream) {
497 // check magic bytes an version number

Callers 1

SaveArrayAsNumpyFunction · 0.70

Calls 3

write_header_dictFunction · 0.70
write_magicFunction · 0.70
writeMethod · 0.45

Tested by

no test coverage detected