speed_test_nested_array.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // MessagePack for C++ example
  2. //
  3. // Copyright (C) 2013-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. // g++ -std=c++11 -O3 -g -Ipath_to_msgpack_src -Ipath_to_boost speed_test.cc -Lpath_to_boost_lib -lboost_timer -lboost_system
  10. // export LD_LIBRARY_PATH=path_to_boost_lib
  11. #include <msgpack.hpp>
  12. #include <string>
  13. #include <iostream>
  14. #include <sstream>
  15. #include <vector>
  16. #include <boost/timer/timer.hpp>
  17. template <typename T, std::size_t level>
  18. struct vecvec {
  19. typedef std::vector<typename vecvec<T, level - 1>::type> type;
  20. static void fill(type& v, std::size_t num_of_elems, T const& val) {
  21. for (std::size_t elem = 0; elem < num_of_elems; ++elem) {
  22. typename vecvec<T, level - 1>::type child;
  23. vecvec<T, level - 1>::fill(child, num_of_elems, val);
  24. v.push_back(child);
  25. }
  26. }
  27. };
  28. template <typename T>
  29. struct vecvec<T, 0> {
  30. typedef std::vector<T> type;
  31. static void fill(type& v, std::size_t num_of_elems, T const& val) {
  32. for (std::size_t elem = 0; elem < num_of_elems; ++elem) {
  33. v.push_back(val);
  34. }
  35. }
  36. };
  37. void test_array_of_array() {
  38. std::cout << "[TEST][array_of_array]" << std::endl;
  39. // setup
  40. int const depth = 4;
  41. std::cout << "Setting up array data..." << std::endl;
  42. vecvec<int, depth>::type v1;
  43. vecvec<int, depth>::fill(v1, 3, 42);
  44. std::cout << "Start packing..." << std::endl;
  45. std::stringstream buffer;
  46. {
  47. boost::timer::cpu_timer timer;
  48. msgpack::pack(buffer, v1);
  49. std::string result = timer.format();
  50. std::cout << result << std::endl;
  51. }
  52. std::cout << "Pack finished..." << std::endl;
  53. buffer.seekg(0);
  54. std::string str(buffer.str());
  55. msgpack::object_handle oh;
  56. std::cout << "Start unpacking...by void unpack(object_handle& oh, const char* data, size_t len)" << std::endl;
  57. {
  58. boost::timer::cpu_timer timer;
  59. msgpack::unpack(oh, str.data(), str.size());
  60. std::string result = timer.format();
  61. std::cout << result << std::endl;
  62. }
  63. std::cout << "Unpack finished..." << std::endl;
  64. vecvec<int, depth>::type v2;
  65. std::cout << "Start converting..." << std::endl;
  66. {
  67. boost::timer::cpu_timer timer;
  68. oh.get().convert(v2);
  69. std::string result = timer.format();
  70. std::cout << result << std::endl;
  71. }
  72. std::cout << "Convert finished..." << std::endl;
  73. }
  74. int main(void)
  75. {
  76. test_array_of_array();
  77. }