fwd.hpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // Copyright 2015-2017 Hans Dembinski
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. // (See accompanying file LICENSE_1_0.txt
  5. // or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. #ifndef BOOST_HISTOGRAM_FWD_HPP
  7. #define BOOST_HISTOGRAM_FWD_HPP
  8. /**
  9. \file boost/histogram/fwd.hpp
  10. Forward declarations, tag types and type aliases.
  11. */
  12. #include <boost/core/use_default.hpp>
  13. #include <boost/histogram/detail/attribute.hpp> // BOOST_HISTOGRAM_DETAIL_NODISCARD
  14. #include <string>
  15. #include <vector>
  16. namespace boost {
  17. namespace histogram {
  18. /// Tag type to indicate use of a default type
  19. using boost::use_default;
  20. namespace axis {
  21. /// Integral type for axis indices
  22. using index_type = int;
  23. /// Real type for axis indices
  24. using real_index_type = double;
  25. /// Empty metadata type
  26. struct null_type {};
  27. #ifndef BOOST_HISTOGRAM_DOXYGEN_INVOKED
  28. namespace transform {
  29. struct id;
  30. struct log;
  31. struct sqrt;
  32. struct pow;
  33. } // namespace transform
  34. template <class Value = double, class Transform = use_default,
  35. class MetaData = use_default, class Options = use_default>
  36. class regular;
  37. template <class Value = int, class MetaData = use_default, class Options = use_default>
  38. class integer;
  39. template <class Value = double, class MetaData = use_default, class Options = use_default,
  40. class Allocator = std::allocator<Value>>
  41. class variable;
  42. template <class Value = int, class MetaData = use_default, class Options = use_default,
  43. class Allocator = std::allocator<Value>>
  44. class category;
  45. template <class... Ts>
  46. class variant;
  47. #endif // BOOST_HISTOGRAM_DOXYGEN_INVOKED
  48. } // namespace axis
  49. #ifndef BOOST_HISTOGRAM_DOXYGEN_INVOKED
  50. template <class T>
  51. struct weight_type;
  52. template <class T>
  53. struct sample_type;
  54. namespace accumulators {
  55. template <class Value = double>
  56. class sum;
  57. template <class Value = double>
  58. class weighted_sum;
  59. template <class Value = double>
  60. class mean;
  61. template <class Value = double>
  62. class weighted_mean;
  63. } // namespace accumulators
  64. struct unsafe_access;
  65. template <class Allocator = std::allocator<char>>
  66. class unlimited_storage;
  67. template <class T>
  68. class storage_adaptor;
  69. #endif // BOOST_HISTOGRAM_DOXYGEN_INVOKED
  70. /// Vector-like storage for fast zero-overhead access to cells
  71. template <class T, class A = std::allocator<T>>
  72. using dense_storage = storage_adaptor<std::vector<T, A>>;
  73. /// Default storage, optimized for unweighted histograms
  74. using default_storage = unlimited_storage<>;
  75. /// Dense storage which tracks sums of weights and a variance estimate
  76. using weight_storage = dense_storage<accumulators::weighted_sum<>>;
  77. /// Dense storage which tracks means of samples in each cell
  78. using profile_storage = dense_storage<accumulators::mean<>>;
  79. /// Dense storage which tracks means of weighted samples in each cell
  80. using weighted_profile_storage = dense_storage<accumulators::weighted_mean<>>;
  81. #ifndef BOOST_HISTOGRAM_DOXYGEN_INVOKED
  82. template <class Axes, class Storage = default_storage>
  83. class BOOST_HISTOGRAM_DETAIL_NODISCARD histogram;
  84. #endif
  85. } // namespace histogram
  86. } // namespace boost
  87. #endif