// 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 #include #include #include #include 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(), 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"); } //]