$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r82365 - sandbox/static_vector/example
From: athundt_at_[hidden]
Date: 2013-01-05 16:21:40
Author: ahundt
Date: 2013-01-05 16:21:40 EST (Sat, 05 Jan 2013)
New Revision: 82365
URL: http://svn.boost.org/trac/boost/changeset/82365
Log:
Added simple static_vector examples and a small benchmark.
Signed-off-by: Andrew Hundt <ATHundt_at_[hidden]>
Added:
   sandbox/static_vector/example/bench_static_vector.cpp   (contents, props changed)
   sandbox/static_vector/example/static_vector_example.cpp   (contents, props changed)
   sandbox/static_vector/example/static_vector_set_example.cpp   (contents, props changed)
Added: sandbox/static_vector/example/bench_static_vector.cpp
==============================================================================
--- (empty file)
+++ sandbox/static_vector/example/bench_static_vector.cpp	2013-01-05 16:21:40 EST (Sat, 05 Jan 2013)
@@ -0,0 +1,96 @@
+
+// benchmark based on: http://cpp-next.com/archive/2010/10/howards-stl-move-semantics-benchmark/
+
+#include "boost/container/static_vector.hpp"
+#include "boost/container/vector.hpp"
+#include "boost/container/set.hpp"
+#include <vector>
+#include <iostream>
+#include <boost/timer/timer.hpp>
+#include <set>
+#include <algorithm>
+#include <exception>
+
+using boost::timer::cpu_timer;
+using boost::timer::cpu_times;
+using boost::timer::nanosecond_type;
+
+static const std::size_t N = 720;
+
+extern bool some_test;
+
+template<typename T>
+T get_set(std::size_t)
+{
+    T s;
+    for (std::size_t i = 0; i < N; ++i)
+        s.push_back(std::rand());
+        
+    if (some_test)
+        return s;
+    return T();
+}
+
+template<typename T>
+T generate()
+{
+    T v;
+    for (std::size_t i = 0; i < N; ++i)
+        v.push_back(get_set<typename T::value_type>(i));
+    if (some_test)
+        return v;
+    return T();
+}
+
+template<typename T>
+cpu_times time_it()
+{
+    cpu_timer totalTime, stepTime;
+    {
+        T v = generate<T>();
+        totalTime.stop(); stepTime.stop();
+        std::cout << "  construction took " << boost::timer::format(stepTime.elapsed());
+        
+        totalTime.resume(); stepTime.start();
+        std::sort(v.begin(), v.end());
+        totalTime.stop(); stepTime.stop();
+        std::cout << "  sort took         " << boost::timer::format(stepTime.elapsed());
+        
+        totalTime.resume(); stepTime.start();
+        std::rotate(v.begin(), v.begin() + v.size()/2, v.end());
+        totalTime.stop(); stepTime.stop();
+        std::cout << "  rotate took       " << boost::timer::format(stepTime.elapsed());
+        
+        totalTime.resume(); stepTime.start();
+    }
+    
+    totalTime.stop(); stepTime.stop();
+    std::cout << "  destruction took  " << boost::timer::format(stepTime.elapsed());
+    std::cout << "  done\n" << std::endl;
+    
+    std::cout << "  Total time =      " << boost::timer::format(totalTime.elapsed()) << "\n\n\n";
+    return totalTime.elapsed();
+}
+
+int main()
+{
+    try {
+        std::cout << "N = " << N << "\n\n";
+        
+        std::cout << "static_vector benchmark:\n";
+        cpu_times tsv = time_it<boost::container::static_vector<boost::container::static_vector<std::size_t,N>,N > >();
+        
+        std::cout << "vector benchmark\n";
+        cpu_times tv = time_it<boost::container::vector<boost::container::vector<std::size_t> > >();
+        
+        std::cout << "static_vector/vector total time comparison:"
+        << "\n  wall          = " << ((double)tsv.wall/(double)tv.wall)
+        << "\n  user          = " << ((double)tsv.user/(double)tv.user)
+        << "\n  system        = " << ((double)tsv.system/(double)tv.system)
+        << "\n  (user+system) = " << ((double)(tsv.system+tsv.user)/(double)(tv.system+tv.user)) << '\n';
+    }catch(std::exception e){
+        std::cout << e.what();
+    }
+}
+
+bool some_test = true;
Added: sandbox/static_vector/example/static_vector_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/static_vector/example/static_vector_example.cpp	2013-01-05 16:21:40 EST (Sat, 05 Jan 2013)
@@ -0,0 +1,56 @@
+/**
+ *  @file   static_vector_example.cpp
+ *  @date   Aug 14, 2011
+ *  @author Andrew Hundt <ATHundt_at_[hidden]>
+ *
+ *  (C) Andrew Hundt 2011-2012 <ATHundt_at_[hidden]>
+ *
+ *  Distributed under the Boost Software License, Version 1.0. (See
+ *  accompanying file LICENSE_1_0.txt or copy at
+ *  http://www.boost.org/LICENSE_1_0.txt)
+ *
+ *  @brief  static_vector_example.cpp demonstrates the use of boost::container::static_vector
+ *
+ */
+ 
+#include <iostream>
+#include <string>
+#include <set>
+#include "boost/container/static_vector.hpp"
+
+using namespace std;
+using namespace boost;
+
+  
+void print(std::size_t value){
+  cout << " " << value;
+}
+
+
+int main(int argc, char** argv){
+  
+  // create static_vector with a capacity of 3
+  boost::container::static_vector<std::size_t,3> three; // size: 0 capacity: 3
+
+  three.push_back(5); // size: 1 capacity: 3
+  three.push_back(2); // size: 2 capacity: 3
+  three.push_back(1); // size: 3 capacity: 3
+  
+  cout << "Values: ";
+  std::for_each(three.begin(),three.end(),print);
+  cout << "size: " << three.size() << " capacity: "  << three.capacity() << std::endl; // size: 3 capacity: 3
+  
+  // three.push_back(3); // uncomment for undefined behavior, adding a 4th element goes over the end. capacity: 3 size: 3
+  
+  std::sort(three.begin(), three.end());
+  cout << "Sorted:";
+  std::for_each(three.begin(),three.end(),print);
+  cout << "size: " << three.size() << " capacity: "  << three.capacity() << std::endl; // size: 3 capacity: 3
+  
+  three.pop_back(); // size: 2 capacity: 3
+  three.shrink_to_fit(); // has no effect, size: 2 capacity: 3
+  
+  cout << "Popped: ";
+  std::for_each(three.begin(),three.end(),print);
+  cout << "  size: " << three.size() << " capacity: "  << three.capacity() << std::endl; // size: 2 capacity: 3
+}
\ No newline at end of file
Added: sandbox/static_vector/example/static_vector_set_example.cpp
==============================================================================
--- (empty file)
+++ sandbox/static_vector/example/static_vector_set_example.cpp	2013-01-05 16:21:40 EST (Sat, 05 Jan 2013)
@@ -0,0 +1,69 @@
+/**
+ *  @file   static_vector_set_example.cpp
+ *  @date   Aug 14, 2011
+ *  @author Andrew Hundt <ATHundt_at_[hidden]>
+ *
+ *  (C) Andrew Hundt 2011 <ATHundt_at_[hidden]>
+ *
+ *  Distributed under the Boost Software License, Version 1.0. (See
+ *  accompanying file LICENSE_1_0.txt or copy at
+ *  http://www.boost.org/LICENSE_1_0.txt)
+ *
+ *  @brief  static_vector_set_example.cpp demonstrates the use of boost::container::static_vector
+ *
+ */
+ 
+#include <iostream>
+#include <string>
+#include <set>
+#include "boost/container/static_vector.hpp"
+
+namespace boost
+{
+#ifdef BOOST_NO_EXCEPTIONS
+void throw_exception(std::exception const & e){}; // user defined
+#endif // BOOST_NO_EXCEPTIONS
+} // namespace boost
+
+using namespace std;
+using namespace boost;
+
+typedef boost::container::static_vector<std::set<std::size_t>,3> ThreeSetType;
+  
+void print(std::size_t value){
+  cout << " " << value;
+}
+
+
+void printSet(std::set<std::size_t> value){
+  cout << " (";
+  std::for_each(value.begin(),value.end(),print);
+  cout << ")";
+}
+
+ThreeSetType makeThreeSet(){
+  ThreeSetType t;
+  std::set<std::size_t> s;
+  s.insert(3);
+  t.push_back(s);
+  s.insert(2);
+  t.push_back(s);
+  s.insert(1);
+  t.push_back(s);
+  return t;
+}
+
+int main(int argc, char** argv){
+  cout << "Creating threeSet, a boost::container::static_vector of 3 std::set objects containing (3), (3 2), and (3 2 1), respectively" << std::endl;
+  ThreeSetType threeSet = makeThreeSet();
+  cout << "threeSet Values:" << std::endl;
+  std::for_each(threeSet.begin(),threeSet.end(),printSet);
+  
+  cout << std::endl;
+  cout << "Sorting threeSet:" << std::endl;
+  std::sort(threeSet.begin(), threeSet.end());
+  std::for_each(threeSet.begin(),threeSet.end(),printSet);
+  
+  cout << std::endl << "Success!" << std::endl;
+  
+}
\ No newline at end of file