]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/property_tree/examples/speed_test.cpp
1 // ----------------------------------------------------------------------------
2 // Copyright (C) 2002-2006 Marcin Kalicinski
4 // Distributed under the Boost Software License, Version 1.0.
5 // (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
8 // For more information, see www.boost.org
9 // ----------------------------------------------------------------------------
11 #define _HAS_ITERATOR_DEBUGGING 0
13 #include <boost/property_tree/ptree.hpp>
14 #include <boost/format.hpp>
15 #include <boost/shared_array.hpp>
21 using namespace boost
;
22 using namespace boost::property_tree
;
26 vector
<string
> shuffled_keys
;
28 void prepare_keys(int size
)
32 for (int i
= 0; i
< size
; ++i
)
33 keys
.push_back((format("%d") % i
).str());
36 random_shuffle(shuffled_keys
.begin(), shuffled_keys
.end());
39 void clock_push_back(int size
)
42 int max_repeats
= 1000000 / size
;
43 shared_array
<ptree
> pt_array(new ptree
[max_repeats
]);
46 clock_t t1
= clock(), t2
;
51 ptree
&pt
= pt_array
[n
];
52 for (int i
= 0; i
< size
; ++i
)
53 pt
.push_back(ptree::value_type(shuffled_keys
[i
], ptree()));
56 } while (t2
- t1
< CLOCKS_PER_SEC
);
58 cout
<< " push_back (" << size
<< "): " << double(t2
- t1
) / CLOCKS_PER_SEC
/ n
* 1000 << " ms\n";
62 void clock_find(int size
)
67 for (int i
= 0; i
< size
; ++i
)
68 pt
.push_back(ptree::value_type(keys
[i
], ptree("data")));
71 clock_t t1
= clock(), t2
;
74 for (int i
= 0; i
< size
; ++i
)
75 pt
.find(shuffled_keys
[i
]);
78 } while (t2
- t1
< CLOCKS_PER_SEC
);
80 cout
<< " find (" << size
<< "): " << double(t2
- t1
) / CLOCKS_PER_SEC
/ n
* 1000 << " ms\n";
84 void clock_erase(int size
)
88 int max_repeats
= 100000 / size
;
89 shared_array
<ptree
> pt_array(new ptree
[max_repeats
]);
92 for (int n
= 0; n
< max_repeats
; ++n
)
93 for (int i
= 0; i
< size
; ++i
)
94 pt_array
[n
].push_back(ptree::value_type(keys
[i
], ptree("data")));
97 clock_t t1
= clock(), t2
;
100 if (n
>= max_repeats
)
102 ptree
&pt
= pt_array
[n
];
103 for (int i
= 0; i
< size
; ++i
)
104 pt
.erase(shuffled_keys
[i
]);
107 } while (t2
- t1
< CLOCKS_PER_SEC
);
109 cout
<< " erase (" << size
<< "): " << double(t2
- t1
) / CLOCKS_PER_SEC
/ n
* 1000 << " ms\n";
117 clock_push_back(100);
118 clock_push_back(1000);