container.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. // MessagePack for C++ example
  2. //
  3. // Copyright (C) 2015 KONDO Takatoshi
  4. //
  5. // Distributed under the Boost Software License, Version 1.0.
  6. // (See accompanying file LICENSE_1_0.txt or copy at
  7. // http://www.boost.org/LICENSE_1_0.txt)
  8. //
  9. #include <iostream>
  10. #include <sstream>
  11. #include <cassert>
  12. #include <array>
  13. #include <tuple>
  14. #include <unordered_map>
  15. #include <unordered_set>
  16. #include <forward_list>
  17. #include <string>
  18. #include <msgpack.hpp>
  19. void array() {
  20. std::array<int, 5> a { { 1, 2, 3, 4, 5 } };
  21. std::stringstream ss;
  22. msgpack::pack(ss, a);
  23. msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
  24. msgpack::object obj = oh.get();
  25. std::cout << obj << std::endl;
  26. assert((obj.as<std::array<int, 5>>()) == a);
  27. }
  28. void tuple() {
  29. std::tuple<bool, std::string, int> t(true, "ABC", 42);
  30. std::stringstream ss;
  31. msgpack::pack(ss, t);
  32. auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
  33. auto obj = oh.get();
  34. std::cout << obj << std::endl;
  35. assert(obj.as<decltype(t)>() == t);
  36. }
  37. void unordered_map() {
  38. std::unordered_map<std::string, int> m { {"ABC", 1}, {"DEF", 3} };
  39. std::stringstream ss;
  40. msgpack::pack(ss, m);
  41. auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
  42. msgpack::object obj = oh.get();
  43. std::cout << obj << std::endl;
  44. assert(obj.as<decltype(m)>() == m);
  45. }
  46. void unordered_set() {
  47. std::unordered_set<std::string> s { "ABC", "DEF" };
  48. std::stringstream ss;
  49. msgpack::pack(ss, s);
  50. auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
  51. auto obj = oh.get();
  52. std::cout << obj << std::endl;
  53. assert(obj.as<decltype(s)>() == s);
  54. }
  55. void forward_list() {
  56. using type = std::forward_list<std::string>;
  57. type f { "ABC", "DEF" };
  58. std::stringstream ss;
  59. msgpack::pack(ss, f);
  60. auto oh = msgpack::unpack(ss.str().data(), ss.str().size());
  61. auto obj = oh.get();
  62. std::cout << obj << std::endl;
  63. assert(obj.as<type>() == f);
  64. }
  65. void combi() {
  66. std::array<int, 5> a { { 1, 2, 3, 4, 5 } };
  67. std::tuple<bool, std::string, int> t {true, "ABC", 42};
  68. std::unordered_map<std::string, int> m { {"ABC", 1}, {"DEF", 3} };
  69. std::unordered_set<std::string> s { "ABC", "DEF" };
  70. std::forward_list<std::string> f { "ABC", "DEF" };
  71. std::stringstream ss;
  72. msgpack::pack(ss, a);
  73. msgpack::pack(ss, t);
  74. msgpack::pack(ss, m);
  75. msgpack::pack(ss, s);
  76. msgpack::pack(ss, f);
  77. std::size_t offset = 0;
  78. std::cout << "offset: " << offset << std::endl;
  79. {
  80. auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
  81. auto obj = oh.get();
  82. std::cout << obj << std::endl;
  83. assert(obj.as<decltype(a)>() == a);
  84. }
  85. std::cout << "offset: " << offset << std::endl;
  86. {
  87. auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
  88. auto obj = oh.get();
  89. std::cout << obj << std::endl;
  90. assert(obj.as<decltype(t)>() == t);
  91. }
  92. std::cout << "offset: " << offset << std::endl;
  93. {
  94. auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
  95. auto obj = oh.get();
  96. std::cout << obj << std::endl;
  97. assert(obj.as<decltype(m)>() == m);
  98. }
  99. std::cout << "offset: " << offset << std::endl;
  100. {
  101. auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
  102. auto obj = oh.get();
  103. std::cout << obj << std::endl;
  104. assert(obj.as<decltype(s)>() == s);
  105. }
  106. std::cout << "offset: " << offset << std::endl;
  107. {
  108. auto oh = msgpack::unpack(ss.str().data(), ss.str().size(), offset);
  109. auto obj = oh.get();
  110. std::cout << obj << std::endl;
  111. assert(obj.as<decltype(f)>() == f);
  112. }
  113. std::cout << "offset: " << offset << std::endl;
  114. }
  115. int main() {
  116. array();
  117. tuple();
  118. unordered_map();
  119. unordered_set();
  120. forward_list();
  121. combi();
  122. }