]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/histogram/examples/guide_custom_accumulators_with_metadata.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / histogram / examples / guide_custom_accumulators_with_metadata.cpp
diff --git a/ceph/src/boost/libs/histogram/examples/guide_custom_accumulators_with_metadata.cpp b/ceph/src/boost/libs/histogram/examples/guide_custom_accumulators_with_metadata.cpp
new file mode 100644 (file)
index 0000000..478f978
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2019 Hans Dembinski
+//
+// 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)
+
+//[ guide_custom_accumulators_with_metadata
+
+#include <boost/histogram.hpp>
+#include <cmath>
+#include <iostream>
+#include <sstream>
+#include <string>
+
+int main() {
+  using namespace boost::histogram;
+
+  // derive custom accumulator from one of the builtins
+  struct accumulator_with_metadata : accumulators::count<> {
+    std::string meta; // custom meta data
+
+    // arbitrary additional data and interface could be added here
+  };
+
+  // make 1D histogram with custom accmulator
+  auto h = make_histogram_with(dense_storage<accumulator_with_metadata>(),
+                               axis::integer<>(1, 4));
+
+  // fill some weighted entries
+  auto x = {1, 0, 2, 1};
+  h.fill(x);
+
+  // assigning meta data to two bins
+  h[0].meta = "Foo";
+  h[2].meta = "Bar";
+
+  std::ostringstream os;
+  for (auto&& x : indexed(h))
+    os << x.bin() << " value " << x->value() << " meta " << x->meta << "\n";
+
+  std::cout << os.str() << std::flush;
+  assert(os.str() == "1 value 2 meta Foo\n"
+                     "2 value 1 meta \n"
+                     "3 value 0 meta Bar\n");
+}
+
+//]