From d49039e5542a6faf8f19a1831e0f8d06f276b201 Mon Sep 17 00:00:00 2001 From: Martin Swany Date: Thu, 17 Jul 2025 09:46:30 -0400 Subject: [PATCH 1/2] add support for multimap. emplace is fine rather than insert_or_assign since we're presumably unpacking into an empty map. --- msgpack/include/msgpack/msgpack.hpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/msgpack/include/msgpack/msgpack.hpp b/msgpack/include/msgpack/msgpack.hpp index a300d5d..160440b 100644 --- a/msgpack/include/msgpack/msgpack.hpp +++ b/msgpack/include/msgpack/msgpack.hpp @@ -110,6 +110,11 @@ struct is_container > { static const bool value = true; }; +template +struct is_container > { + static const bool value = true; +}; + template struct is_container > { static const bool value = true; @@ -140,6 +145,11 @@ struct is_map > { static const bool value = true; }; +template +struct is_map > { + static const bool value = true; +}; + template struct is_map > { static const bool value = true; @@ -637,7 +647,7 @@ class Unpacker { MappedType value{}; unpack_type(key); unpack_type(value); - map.insert_or_assign(key, value); + map.emplace(key, value); } } else if (safe_data() == map16) { safe_increment(); @@ -651,7 +661,7 @@ class Unpacker { MappedType value{}; unpack_type(key); unpack_type(value); - map.insert_or_assign(key, value); + map.emplace(key, value); } } else { std::size_t map_size = safe_data() & 0b00001111; @@ -661,7 +671,7 @@ class Unpacker { MappedType value{}; unpack_type(key); unpack_type(value); - map.insert_or_assign(key, value); + map.emplace(key, value); } } } From a24fdec69d28b8f656316ea91b6d3e8db43a30ea Mon Sep 17 00:00:00 2001 From: Martin Swany Date: Fri, 18 Jul 2025 09:20:41 -0400 Subject: [PATCH 2/2] test and input data --- test/msgpack-test.txt | 434 ++++++++++++++++++++++++++++++++++++++++++ test/test.cpp | 71 +++++++ 2 files changed, 505 insertions(+) create mode 100644 test/msgpack-test.txt create mode 100644 test/test.cpp diff --git a/test/msgpack-test.txt b/test/msgpack-test.txt new file mode 100644 index 0000000..35c585d --- /dev/null +++ b/test/msgpack-test.txt @@ -0,0 +1,434 @@ +FA009A9C5136BE09,000000000000A805 +FA029C0663FAE70F,0000000000002C9F +FA02BDA1EDE3FF13,0000000000006AA3 +FA031F84BD7FEE0F,00000000000081A4 +FA048E8C5195FF0E,000000000000081C +FA06660D5EADCD0C,00000000000009D8 +FA09CBA1107AB006,000000000000C0BF +FA0ACD31E1458812,00000000000069F6 +FA0BD4A0BB13100B,000000000000DD3D +FA0D9558218DE006,0000000000004123 +FA0FB53FB8524E09,000000000000A3AB +FA10CBED2B6D5301,000000000000046D +FA1141A244AA060B,00000000000007D1 +FA1474F56A45260A,00000000000031D7 +FA14812F6ECA260B,0000000000004398 +FA179E5057278C10,0000000000004FBF +FA180CDC3A1C0D0F,0000000000006533 +FA1A17B2B95DC10B,0000000000003F9A +FA1A51EA8C1C6611,000000000000AC84 +FA1BC40B4DB08D01,00000000000088D3 +FA1C34C5FEC81009,000000000000E858 +FA1C3584D238220C,000000000000D2DA +FA1D1711B480B711,0000000000000B9C +FA1D296066363605,000000000000AF31 +FA1E79DD4BED6A02,000000000000F835 +FA213A3EF2923B0D,0000000000009B98 +FA215F3EBB569005,00000000000008DC +FA2399A16F42450D,0000000000003E24 +FA23B89341961807,0000000000007108 +FA2538D4C4150702,0000000000005FB6 +FA2538F7516F840F,00000000000023A9 +FA2548F14B4E0F0E,000000000000DF99 +FA25ABF75E5FC105,000000000000DCA0 +FA26ADB3AEF48203,0000000000000AB7 +FA28859B369D910B,00000000000092EA +FA2B6AA3ED07FA03,000000000000652A +FA2C2B7AAADEA80B,00000000000021A8 +FA2C4318B39A0305,000000000000507C +FA2EEC5AC75C5513,000000000000ADEC +FA2F486B76E3EB0E,00000000000074E2 +FA2F80CD84BD6B04,0000000000004DE8 +FA301A1A4633C50E,0000000000007128 +FA30A17646D3FA0C,0000000000007DF7 +FA30C1FA8DA89E0C,00000000000066A7 +FA3234A2B848660A,00000000000058ED +FA32FD2E0D60A201,00000000000067C2 +FA33DE53A747340C,00000000000001EF +FA352F20CFB1B00C,000000000000F79D +FA35FE4973078B11,00000000000057C8 +FA3B3876D8D76003,0000000000005B30 +FA3CDAACA3491307,0000000000005DD9 +FA3D946A98D28A07,00000000000099F4 +FA417BF5230C8800,000000000000A98C +FA4192EEDE5AD208,0000000000001BF1 +FA422B8B469DE80C,0000000000005B71 +FA42D79C95DECB09,0000000000008474 +FA42FCB9985D5E03,0000000000002F75 +FA456A1DEFA2130A,000000000000CAA3 +FA457042D14AE706,000000000000C29A +FA46932733C3D109,000000000000157C +FA476619BC762F04,0000000000002463 +FA48C29FF7B8480A,000000000000BD4A +FA4902E8B63A3F14,000000000000CCF1 +FA4969346C65450B,00000000000089CE +FA4E4709AD53D80E,0000000000007C63 +FA4F08C8051D5E04,000000000000CA55 +FA4F4D96BA844A04,000000000000ACF8 +FA4F8CABE6A0AF11,000000000000C821 +FA4FB05A29130503,0000000000007D0E +FA507F0E41034A0B,000000000000A7C3 +FA53A1DD1B228907,00000000000038CD +FA548887C5083509,000000000000C3B4 +FA56D0E027C01B09,00000000000049C5 +FA56E58313158201,000000000000FE48 +FA56EA029241140E,000000000000A4E9 +FA57279E88A80D03,00000000000003D2 +FA59263E3BB29807,000000000000F6B6 +FA59304EB5BB0806,000000000000661F +FA5A53A0A7C01507,000000000000B14E +FA649E9B7FF64506,000000000000DE05 +FA64D372FC269A0F,00000000000021BF +FA65836B09A4A513,0000000000006193 +FA6591942619D914,0000000000002177 +FA67C672D7C42814,000000000000C111 +FA6B1375E4FBB20B,0000000000007F34 +FA6B3DA2EA591109,000000000000178F +FA6B45F96A58A304,000000000000896B +FA6BDF14429EDA02,0000000000002332 +FA6E390AA79C3B06,000000000000B150 +FA6EBF2EDFCDF512,0000000000003F6A +FA71E10699AABD01,000000000000C672 +FA73ED38F0E70A12,000000000000C589 +FA761733F606740F,0000000000009774 +FA7680B6249D2103,000000000000A57E +FA76883B92800C01,000000000000A558 +FA77B83C12B2CA01,0000000000007174 +FA799FD2EA6FC109,00000000000018B5 +FA7A7BE34F5F3300,0000000000009611 +FA7B08DC2418E606,000000000000504A +FA7B7E95BF4C8C16,000000000000CC7F +FA7D058B6B76AB0F,0000000000000FA2 +FA7E13690B54D905,0000000000005B1B +FA7EB253F90F0E03,000000000000B2E8 +FA7F20B028D95111,00000000000080A0 +FA7FBD6525CB8C12,000000000000850E +FA7FCF7F19740D06,000000000000D62B +FA810D4ED364F209,0000000000007319 +FA8444744F233513,0000000000009829 +FA84C2ED645E7214,000000000000422F +FA87084EF58A4711,000000000000ACB6 +FA870949C6CCA402,000000000000C68C +FA8799EEE892CE02,0000000000004231 +FA8824CECDAB7A0B,00000000000036F2 +FA88F292BF509C0B,0000000000009DE6 +FA893397D82C2302,0000000000000BF3 +FA89F2E94F9B9504,000000000000A0F1 +FA8BA98A6474FD14,0000000000008F8D +FA8C270B95B89B00,000000000000FDC4 +FA8DC0BEED7C7F0E,0000000000001E49 +FA8DD17664990F01,0000000000003861 +FA8F00F573BE4800,000000000000701E +FA8F8BC623E6C016,000000000000A0A0 +FA903358A3687107,00000000000043B9 +FA90AC0F109AE603,0000000000002F63 +FA912E4EDB202906,000000000000D447 +FA94123BEB89840E,0000000000005CFA +FA9426AAC2449111,0000000000009C58 +FA94270399488911,0000000000001EA8 +FA9558112B9D4E15,000000000000F751 +FA9614143B66CC0E,000000000000AB9F +FA961E1458A7F202,000000000000D8D6 +FA969FBE6D800A15,0000000000002D8B +FA96A71E8901EB00,000000000000EF19 +FA97499DB3556604,0000000000005B3A +FA98E899F163FC00,000000000000A721 +FA99BF7DF62D5011,000000000000EA82 +FAA0B12FDACA140E,00000000000073FC +FAA0CE81A89CF208,00000000000060E6 +FAA5E5A2102BB302,00000000000041F9 +FAA6723CE428AB11,000000000000785F +FAABCFDCA0A32A15,0000000000008383 +FAABDC2533D73B02,000000000000CEC8 +FAABE2D6DA53D513,000000000000B053 +FAAC80FED88B530A,000000000000F5FA +FAAC8B3BD9008F0F,000000000000C3D5 +FAACB3C72BAE8700,0000000000000785 +FAACE2D234027203,000000000000FC57 +FAAE90B0C5354011,0000000000004DF0 +FAB0954AB04EA216,000000000000D881 +FAB21073C52F850B,00000000000054D5 +FAB4D871F3EC9706,000000000000ED41 +FAB6015DC5BDC60C,0000000000006CC0 +FAB71E2B714BCC09,000000000000733F +FAB7694741AE2A00,000000000000A513 +FAB89719FE7B260B,00000000000001C2 +FABB604818C46407,0000000000000107 +FABB6BC89D773204,0000000000005400 +FABBAE3654C54E12,0000000000008505 +FABC8816A46FA702,0000000000006D45 +FABC922BA2D8B311,000000000000073D +FABD703494A24B14,00000000000019EE +FABD9B36E2D3A511,0000000000005766 +FABE313DD132F911,0000000000005035 +FABF8E7F26D9FF04,0000000000004160 +FAC0164C70B2F003,00000000000040E9 +FAC494F5D32FC60F,0000000000005F1A +FAC4F62A1369810D,000000000000DCFE +FAC72D9399BAF00F,000000000000048E +FAC73CD086F5F705,000000000000A3FA +FAC76370455BF708,000000000000EFEB +FAC7F61D116E640B,0000000000001DFB +FAC8717912F52313,0000000000008576 +FAC8FE5C9DE5A20A,0000000000007D50 +FAC99D8A5316DE07,000000000000E647 +FACACD7BD23FCF03,0000000000000873 +FACBB7ED68F9AA09,0000000000008A5C +FACD2DF82A91830E,000000000000E68D +FAD095580CCEEA08,0000000000008198 +FAD17F3DF628BB10,0000000000003DF3 +FAD21DC063168011,000000000000B154 +FAD229FD028FF916,0000000000006B36 +FAD34C05C41A5602,000000000000AF19 +FAD44A311359BD01,0000000000009D48 +FAD4843AEF202909,00000000000098AF +FAD52CC55A398114,000000000000C125 +FAD58F7D4A6D1B13,000000000000F11D +FAD610086650600E,0000000000002814 +FAD6CB0FFAF3F502,FFFFFFFFFFFFFFFF +FAD942CBB8935D10,0000000000005284 +FADA1ED346C44701,000000000000FD78 +FADF2DC0C32A4016,000000000000EED8 +FADF665105CE650A,0000000000003DBD +FAE188AFEB453F0C,000000000000078A +FAE74F1BF6D25F16,0000000000004310 +FAE79AEB35A9860D,0000000000003778 +FAEA981A96950A06,000000000000A756 +FAEDD278ED5CA50D,0000000000009322 +FAEE9B45E81E0B14,000000000000BBD9 +FAEEB2DDD438000F,000000000000BF0F +FAF1514EE72E6F08,0000000000007131 +FAF2BC047BC55716,000000000000C51F +FAF57EF315A3210A,00000000000058DA +FAF6EB2CB62F720C,000000000000F379 +FAF9E82E25B69115,000000000000AA77 +FAFA1AEE85ADEB0F,000000000000972A +FAFA8D47D031A20C,000000000000DBA9 +FAFAA70C616F7400,000000000000A5EC +FAFC62762E864D11,0000000000001427 +FAFCC1D3128AC203,00000000000009BA +FAFCC23645969614,0000000000000B5A +FAFE25E71D001710,000000000000CC8C +FAFE4C7AE386FD14,0000000000000731 +FB00B17EB4D60F07,0000000000004B87 +FB02F4218C362804,0000000000009AFA +FB051F405E2BF014,000000000000C8BE +FB054D5B7617AE0B,0000000000006583 +FB0687124A5D6E15,000000000000FBE5 +FB087DB7FD974C13,0000000000006AAD +FB0B0020E97D030D,0000000000004731 +FB0B180D783D2611,000000000000D68C +FB0BF4A112A6040F,000000000000A2A5 +FB0BFC00A9C62D09,0000000000006FEB +FB0D9553F8DFD805,00000000000051F3 +FB0F16584DB9FF03,0000000000001509 +FB0F3095446F5804,0000000000002C1B +FB141D1D5B96B80C,0000000000002563 +FB145293B9748F07,0000000000002EB2 +FB1552AECE30DD0C,0000000000004B71 +FB15856C7D211C0A,0000000000007BFF +FB164D7385B13C0A,000000000000F176 +FB168ED3B1178403,0000000000008F70 +FB17A3AFF8FB5C04,0000000000009CDA +FB18B34CCEDD7400,0000000000008D6F +FB1A6C13E5CAF202,000000000000D3F6 +FB1B51194445520F,000000000000D7C6 +FB1DFED87F55180A,000000000000B5D1 +FB1E3CBDE4B82B02,000000000000CC53 +FB21D3FBD5361D09,0000000000007E7D +FB237629F1894301,000000000000EF28 +FB23888699E88010,00000000000088C0 +FB24301E430DD60C,00000000000018B9 +FB26AD0F99388A09,000000000000351C +FB27BB7B315C7509,000000000000BBB9 +FB28CD455B33440F,00000000000069B7 +FB28D6F351EC120D,000000000000B3E6 +FB291E5318D1A80C,000000000000528D +FB29C6E5AFF10413,00000000000079A7 +FB2C84DFAAAA9B07,000000000000FEC4 +FB2D5DC60D265909,00000000000081F2 +FB2DBB9F544FFA14,0000000000008DAE +FB2E3D0AF379C907,000000000000633C +FB2E725BB27C6915,000000000000C47F +FB31275F11DFC003,000000000000C8A5 +FB312E7BD16DFF06,0000000000006681 +FB34DE5E0D68E705,0000000000003EB1 +FB37689EA6FB1D02,000000000000885A +FB3846A2FE22120E,0000000000000CB2 +FB38A36676D23815,00000000000044D4 +FB3951B90579BD04,000000000000D9F8 +FB39B97F3318EF08,000000000000D78A +FB39BBE720C9DB0C,000000000000545A +FB3AF9A4A16E4002,0000000000004315 +FB3B885417C7B508,0000000000001932 +FB3BE18C9927E804,000000000000194A +FB3EC17246C24010,00000000000087AC +FB40084B0093C907,000000000000CEFA +FB40E16868AA2001,00000000000030CB +FB4188C84A4FC505,000000000000062F +FB43EDE82994E80C,0000000000005119 +FB4431ADB206C713,000000000000A451 +FB447E3A379F8F05,0000000000009B83 +FB448FEAB070D203,000000000000A801 +FB45A8A28633FA00,0000000000005519 +FB4641F12FF9C60E,0000000000001607 +FB469D10F009BE14,000000000000552D +FB48C2B558588212,0000000000003E6C +FB48E2D5FF97CD05,000000000000021D +FB4BD00B93856405,00000000000064C6 +FB4D8444C711CC11,0000000000006A29 +FB4ED319B2C05C03,000000000000F64C +FB4ED4FCE90F450F,000000000000C0B3 +FB4FE1D0F59F8015,0000000000004F23 +FB4FF069FC594B14,000000000000E956 +FB502022CB7B0505,000000000000790B +FB5069DB5574CF02,0000000000008CE9 +FB5168B8AE764400,000000000000EB18 +FB518299115D0D0C,000000000000C351 +FB51B43BB5C7AB08,00000000000062AF +FB51BF3B8C21CD01,000000000000EE3F +FB56B00141074403,0000000000001784 +FB56DF8A6A28CF12,0000000000004EAB +FB573EF1D5FC9C08,0000000000002966 +FB59F118D87AF005,000000000000BCF6 +FB5AD0537D1E2306,0000000000001C38 +FB5B1819BEBEA612,0000000000006EF8 +FB5D1153C09FEC04,00000000000100C6 +FB60F3071BBE1E16,000000000000345E +FB625625306F1C00,000000000000E84C +FB64530CA9C6EA08,0000000000006605 +FB647BDC4A880511,00000000000082F1 +FB6481ACC1C0E714,000000000000A89C +FB6AD21473699101,00000000000060F7 +FB6B2C7C8C9F0411,000000000000C410 +FB6B82AA6A1D7A08,0000000000002767 +FB6BD97330D2DB04,000000000000F9A1 +FB6D18EE793BCB04,0000000000001564 +FB6DF6ECD82F6C11,0000000000000E7A +FB6F2052B8D90504,00000000000041EE +FB6F6AFEE78DB701,0000000000005E1A +FB700C011F99DE00,000000000000A463 +FB709B5052430812,000000000000058F +FB737CA961C60812,000000000000E5E4 +FB76B58418F60A11,00000000000095CB +FB7787B3F58CF601,0000000000009D79 +FB788BABA8684407,0000000000005F65 +FB7C2A75E61D2210,0000000000004D2A +FB7E7D7C3A197D0B,0000000000002A43 +FB7EC435CA17B40B,0000000000002E0C +FB7EFCA212E31911,0000000000000216 +FB8244CB888F340F,000000000000E9DC +FB82EC6BA471AC12,000000000000D22E +FB83E603A5E6BA07,00000000000048B7 +FB842855E928FA0C,0000000000008835 +FB85FB6AC62E220B,0000000000005535 +FB8AB82C3E96EE05,000000000000CD17 +FB8B6CB29232B610,000000000000436A +FB8B885C7C579F0F,0000000000001581 +FB8BAB5E6A256F06,0000000000004991 +FB8BB4805B81C604,0000000000009B58 +FB8DA52887301117,0000000000005A8B +FB8F71854C770D03,000000000000FB83 +FB9073A1455B4E0A,000000000000B772 +FB90E956E997300E,000000000000E4FB +FB916C189E00D910,0000000000000B37 +FB929E828BB22A02,000000000000E16B +FB95385627FFC505,0000000000009ECA +FB9571C495606701,FFFFFFFFFFFFFFFF +FB95AB01E176E304,000000000000C4B3 +FB962258922C7715,0000000000000AB6 +FB9719644508E012,00000000000004DF +FB971F17FF2DDC0A,000000000000D957 +FB97D4C14A15200E,000000000000C9CD +FB985A3EFBA94404,000000000000CEA5 +FB9B055FF9B83809,0000000000008D9E +FB9C504C3FCECB08,00000000000038E9 +FBA415FA1854C304,0000000000009CF3 +FBA4B034710BCF08,000000000000B2BD +FBA8B33816A58F15,000000000000EA8C +FBA8D7600C2D6800,0000000000003395 +FBA964D47B5A1615,00000000000064D7 +FBA9A3471F52E50F,00000000000052AC +FBAA534F8084F70A,0000000000006124 +FBAA7637F85F2009,0000000000009A23 +FBAB1B3415A0110B,0000000000009174 +FBABE1425232310A,0000000000003CBE +FBABFC409905240A,FFFFFFFFFFFFFFFF +FBAC6AA6A351F010,000000000000EA62 +FBACE0518D99F60B,0000000000006631 +FBAD7CCA22B4F20E,0000000000007D6D +FBADE87B9252F30A,000000000000D294 +FBAEE168F6E3560D,000000000000361D +FBAF58AA1DFD2B0D,00000000000100D8 +FBAFFFFC1A4D2F01,000000000000FCF3 +FBB047246E772500,0000000000005A59 +FBB1955647034E0F,000000000000DB66 +FBB1FED01E0BFF0B,0000000000005379 +FBB288E5F0D10814,0000000000005393 +FBB2EDB987B42003,000000000000A563 +FBB3023822330706,000000000000C139 +FBB4834E24DEEA08,000000000000B9D0 +FBB4B0F5D275D713,000000000000A844 +FBB58BFB9D21F905,0000000000007862 +FBB686E34EE2A412,000000000000A9A2 +FBB76DC53DBD1B06,000000000000CBC3 +FBB7D296C8B6B10B,00000000000004E0 +FBB86977739D4015,000000000000E511 +FBB8C2D539E3010E,000000000000BDE9 +FBBCC5510EF57704,000000000000420A +FBBCEB03D0FE2307,00000000000073EA +FBBD77EB86E0820B,000000000000C6BE +FBBDB5EBDD4CCD0A,000000000000E4D3 +FBBE512EFCA19D05,FFFFFFFFFFFFFFFF +FBBE849EEBC68208,0000000000002290 +FBBFD68E9068080F,0000000000006D05 +FBC0A7AB3E593F0E,0000000000009E3A +FBC310622559B806,0000000000009D0E +FBC324789B42C509,0000000000000D94 +FBC44BEECE9FA313,0000000000005329 +FBC6D34456E9B005,000000000000BED0 +FBC77143A9AD160D,0000000000005AD7 +FBC7F2CD4CDA5E0E,0000000000005A7C +FBC86233A158340A,0000000000005701 +FBC89A4D4601FB10,0000000000009329 +FBC916B754844302,000000000000D0F0 +FBC9933C53C89912,0000000000006737 +FBC9F0D4790DF60F,000000000000B490 +FBCCC29E0D302C0E,FFFFFFFFFFFFFFFF +FBCCE10F826F3D0B,00000000000061BC +FBCD1E28B3B06207,000000000000464E +FBCEF5B15C19F104,000000000000267B +FBD34126A86D2001,00000000000017B2 +FBD55EA4B9EE5C04,00000000000005AB +FBD8B2D17C27020C,00000000000058FE +FBD9D915B842D510,0000000000002176 +FBDA5BD6307F210F,00000000000023CD +FBDAA58C0B86540C,0000000000006E1D +FBDADB5C43F92E15,0000000000003B44 +FBDC5463F0DCBE04,00000000000084A4 +FBE1439050391E0E,0000000000008E09 +FBE315F7C0D8AD0A,00000000000041E5 +FBE3C9C605032A02,000000000000F402 +FBE3F9C9287CBA0B,00000000000000F0 +FBE46C02ED311611,000000000000A8ED +FBE5112FAFB41C17,00000000000050F8 +FBE62CF5E94BFA0C,FFFFFFFFFFFFFFFF +FBE6F8D8E6E4CC07,000000000000C4A5 +FBEB9EC28695DD08,0000000000003AED +FBEC44593191E209,000000000000DB00 +FBED023A8F598F03,000000000000AE5A +FBEF5628028E9514,00000000000001E1 +FBEF65376A1C2D12,000000000000E7F0 +FBF0EB62D9AA770F,000000000000C97F +FBF147DA07C1C712,0000000000003F3F +FBF2AAFDFEED8A04,000000000000D9F4 +FBF3096B92ED4D0B,000000000000010F +FBF407D3C369B501,000000000000C2F0 +FBF5738E055BE909,00000000000096B1 +FBF65F2B25E2AF04,000000000000B3FB +FBF7A7FB707A8802,000000000000D2BF +FBFA3D9706D63803,000000000000B6E2 +FBFACBCF95056F15,0000000000009F0D +FBFC4C28C4AC9B12,000000000000384E +FBFDBE390F18F703,0000000000000AF4 +FBFF22DB086BA403,000000000000DEC5 diff --git a/test/test.cpp b/test/test.cpp new file mode 100644 index 0000000..1d42769 --- /dev/null +++ b/test/test.cpp @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include +#include +#include +#include "../msgpack/include/msgpack/msgpack.hpp" + +using u64 = std::uint64_t; + +// wrapped this way since I dynamically allocate them and I couldn't pack a struct with +// a pointer to the map +struct myMap { + std::multimap map; + + template + void pack(T &pack) { + pack(map); + } + + auto size() { + return(map.size()); + } + auto insert(std::pair p) { + map.insert(p); + } + + auto count(u64 key) { + return(map.count(key)); + } +}; + +int main(int argc, char* argv[]) { + std::string in_file = "./msgpack-test.txt"; + std::ifstream *in_stream = new std::ifstream; + myMap *mm1 = new myMap; + myMap *mm2 = new myMap; + + in_stream->open(in_file); + if (in_stream->fail()) { + printf("Can't open file: %s\n", in_file.c_str()); + exit(-1); + } + + std::string line, part; + u64 a, b; + + while (std::getline(*in_stream, line)) { + part = line.substr(0, line.find(",")); + a = std::strtoull(part.c_str(), NULL, 16); + line.erase(0, line.find(",") + 1); + b = std::strtoull(line.c_str(), NULL, 16); + mm1->map.insert(std::make_pair(a,b)); + } + + FILE* ofp = std::fopen("test-before.txt", "w"); + for (auto const& [ma, mb] : mm1->map) { + fprintf(ofp, "%016lX,%016lX\n", ma, mb); + } + std::fclose(ofp); + + std::vector data_vec = msgpack::pack(*mm1); + *mm2 = msgpack::unpack(data_vec); + + ofp = std::fopen("test-after.txt", "w"); + for (auto const& [ma, mb] : mm2->map) { + fprintf(ofp, "%016lX,%016lX\n", ma, mb); + } + std::fclose(ofp); +} \ No newline at end of file