enum.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 <sstream>
  10. #include <iostream>
  11. #include <cassert>
  12. #include <msgpack.hpp>
  13. enum my_enum {
  14. elem1,
  15. elem2,
  16. elem3
  17. };
  18. MSGPACK_ADD_ENUM(my_enum);
  19. int main(void)
  20. {
  21. { // pack, unpack
  22. std::stringstream sbuf;
  23. msgpack::pack(sbuf, elem1);
  24. msgpack::pack(sbuf, elem2);
  25. my_enum e3 = elem3;
  26. msgpack::pack(sbuf, e3);
  27. msgpack::object_handle oh;
  28. std::size_t off = 0;
  29. msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
  30. std::cout << oh.get().as<my_enum>() << std::endl;
  31. assert(oh.get().as<my_enum>() == elem1);
  32. msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
  33. std::cout << oh.get().as<my_enum>() << std::endl;
  34. assert(oh.get().as<my_enum>() == elem2);
  35. msgpack::unpack(oh, sbuf.str().data(), sbuf.str().size(), off);
  36. std::cout << oh.get().as<my_enum>() << std::endl;
  37. assert(oh.get().as<my_enum>() == elem3);
  38. }
  39. { // create object without zone
  40. msgpack::object obj(elem2);
  41. std::cout << obj.as<my_enum>() << std::endl;
  42. assert(obj.as<my_enum>() == elem2);
  43. }
  44. { // create object with zone
  45. msgpack::zone z;
  46. msgpack::object objz(elem3, z);
  47. std::cout << objz.as<my_enum>() << std::endl;
  48. assert(objz.as<my_enum>() == elem3);
  49. }
  50. }