more refactoring

This commit is contained in:
Hans Dembinski 2016-04-09 16:43:08 -04:00
parent 103fa6cf0a
commit fbe82e3c58
3 changed files with 40 additions and 33 deletions

View File

@ -16,30 +16,17 @@ namespace histogram {
class histogram : public histogram_base {
public:
histogram() {}
histogram(const histogram& o);
explicit histogram(const axes_type& axes);
histogram(const histogram& o) :
histogram_base(o),
data_(o.data_)
{}
explicit
histogram(const axes_type& axes) :
histogram_base(axes),
data_(field_count())
{}
#define BOOST_NHISTOGRAM_CTOR(z, n, unused) \
histogram( BOOST_PP_ENUM_PARAMS_Z(z, n, const axis_type& a) ) : \
#define BOOST_HISTOGRAM_CTOR(z, n, unused) \
histogram( BOOST_PP_ENUM_PARAMS_Z(z, n, const axis_type& a) ) : \
histogram_base( BOOST_PP_ENUM_PARAMS_Z(z, n, a) ), \
data_(field_count()) \
{}
// generates constructors taking 1 to AXIS_LIMIT arguments
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_CTOR, nil)
unsigned depth() const { return data_.depth(); }
double sum() const;
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_HISTOGRAM_CTOR, nil)
template <typename Container>
inline
@ -61,7 +48,7 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_CTOR, ni
data_.increase(k);
}
#define BOOST_NHISTOGRAM_FILL(z, n, unused) \
#define BOOST_HISTOGRAM_FILL(z, n, unused) \
inline \
void fill( BOOST_PP_ENUM_PARAMS_Z(z, n, double x) ) \
{ \
@ -70,7 +57,7 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_CTOR, ni
}
// generates fill functions taking 1 to AXIS_LIMT arguments
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_FILL, nil)
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_HISTOGRAM_FILL, nil)
template <typename Container>
inline
@ -92,7 +79,7 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_FILL, ni
data_.increase(k, w);
}
#define BOOST_NHISTOGRAM_WFILL(z, n, unused) \
#define BOOST_HISTOGRAM_WFILL(z, n, unused) \
inline \
void wfill( BOOST_PP_ENUM_PARAMS_Z(z, n, double x), double w ) \
{ \
@ -101,9 +88,10 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_FILL, ni
}
// generates wfill functions taking 1 to AXIS_LIMT arguments
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_WFILL, nil)
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_HISTOGRAM_WFILL, nil)
template <typename Container>
inline
double value(const Container& idx)
const
{
@ -112,6 +100,7 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_WFILL, n
}
// C-style call
inline
double value(unsigned n, const int* idx)
const
{
@ -119,7 +108,8 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_WFILL, n
return data_.value(linearize(idx));
}
#define BOOST_NHISTOGRAM_VALUE(z, n, unused) \
#define BOOST_HISTOGRAM_VALUE(z, n, unused) \
inline \
double value( BOOST_PP_ENUM_PARAMS_Z(z, n, int i) ) \
const \
{ \
@ -128,9 +118,10 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_WFILL, n
}
// generates value functions taking 1 to AXIS_LIMT arguments
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_VALUE, nil)
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_HISTOGRAM_VALUE, nil)
template <typename Container>
inline
double variance(const Container& idx)
const
{
@ -139,6 +130,7 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_VALUE, n
}
// C-style call
inline
double variance(unsigned n, const int* idx)
const
{
@ -146,7 +138,8 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_VALUE, n
return data_.variance(linearize(idx));
}
#define BOOST_NHISTOGRAM_VARIANCE(z, n, unused) \
#define BOOST_HISTOGRAM_VARIANCE(z, n, unused) \
inline \
double variance( BOOST_PP_ENUM_PARAMS_Z(z, n, int i) ) \
const \
{ \
@ -155,7 +148,11 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_VALUE, n
}
// generates variance functions taking 1 to AXIS_LIMT arguments
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_NHISTOGRAM_VARIANCE, nil)
BOOST_PP_REPEAT_FROM_TO(1, BOOST_HISTOGRAM_AXIS_LIMIT, BOOST_HISTOGRAM_VARIANCE, nil)
unsigned depth() const { return data_.depth(); }
double sum() const;
bool operator==(const histogram& o) const
{ return histogram_base::operator==(o) &&

View File

@ -4,6 +4,16 @@
namespace boost {
namespace histogram {
histogram::histogram(const histogram& o) :
histogram_base(o),
data_(o.data_)
{}
histogram::histogram(const axes_type& axes) :
histogram_base(axes),
data_(field_count())
{}
double
histogram::sum()
const

View File

@ -82,7 +82,7 @@ nstore::operator+=(const nstore& o)
BOOST_HISTOGRAM_NSTORE_ADD(uint32_t);
BOOST_HISTOGRAM_NSTORE_ADD(uint64_t);
#undef BOOST_HISTOGRAM_NSTORE_ADD
default: assert(!"invalid depth");
default: BOOST_ASSERT(!"invalid depth");
}
}
}
@ -120,7 +120,7 @@ nstore::variance(size_type i)
BOOST_HISTOGRAM_NSTORE_VARIANCE(uint32_t);
BOOST_HISTOGRAM_NSTORE_VARIANCE(uint64_t);
#undef BOOST_HISTOGRAM_NSTORE_VARIANCE
default: assert(!"invalid depth");
default: BOOST_ASSERT(!"invalid depth");
}
return 0.0;
}
@ -141,9 +141,9 @@ nstore::destroy()
void
nstore::grow()
{
assert(depth_ > 0);
assert(depth_ < sizeof(uint64_t));
assert(buffer_ != 0);
BOOST_ASSERT(depth_ > 0);
BOOST_ASSERT(depth_ < sizeof(uint64_t));
BOOST_ASSERT(buffer_ != 0);
buffer_ = std::realloc(buffer_, size_ * 2 * depth_);
if (!buffer_) throw std::bad_alloc();
size_type i = size_;
@ -164,7 +164,7 @@ nstore::grow()
void
nstore::wconvert()
{
assert(depth_ < sizeof(wtype));
BOOST_ASSERT(depth_ < sizeof(wtype));
buffer_ = std::realloc(buffer_, size_ * sizeof(wtype));
if (!buffer_) throw std::bad_alloc();
size_type i = size_;
@ -196,7 +196,7 @@ nstore::ivalue(size_type i)
BOOST_HISTOGRAM_NSTORE_IVALUE(uint32_t);
BOOST_HISTOGRAM_NSTORE_IVALUE(uint64_t);
#undef BOOST_HISTOGRAM_NSTORE_IVALUE
default: assert(!"invalid depth");
default: BOOST_ASSERT(!"invalid depth");
}
return 0;
}