coarse_grain(Series const &series, Discretization discretization, ordered_inserter<Out> out) { typedef typename concepts::TimeSeries<Series const>::offset_type offset_type; BOOST_ASSERT(discretization > series.discretization()); BOOST_ASSERT(discretization % series.discretization() == 0); offset_type factor = discretization / series.discretization(); detail::coarse_grain_inserter<ordered_inserter<Out>, offset_type> o(out, factor); return range_run_storage::copy(series, o).out(); }
rotate_left(Series const &series, typename concepts::TimeSeries<Series const>::value_type const &value) { typedef typename concepts::TimeSeries<Series const>::value_type value_type; typedef typename concepts::TimeSeries<Series const>::discretization_type discretization_type; typedef typename concepts::TimeSeries<Series const>::offset_type offset_type; // The partial differences are held in a sparse array. sparse_series<value_type, discretization_type, offset_type> result( time_series::discretization = series.discretization() ); time_series::rotate_left( series , value , time_series::make_ordered_inserter(result) ).commit(); return result; }
period_sums(Series const &series, Offset start, Length length) { typedef typename concepts::TimeSeries<Series const>::value_type value_type; typedef typename concepts::TimeSeries<Series const>::discretization_type discretization_type; // The periodic sums are held in a sparse array. The sums are // stored at the start of their associated periods. sparse_series<value_type, discretization_type, Offset> result( time_series::discretization = series.discretization() ); time_series::period_sums( series , start , length , time_series::make_ordered_inserter(result) ).commit(); return result; }