static void write(succinct::bit_vector_builder& bvb, Iterator begin, uint64_t universe, uint64_t n, global_parameters const& params) { uint64_t new_universe = universe - n + 1; typedef typename std::iterator_traits<Iterator>::value_type value_type; auto new_begin = make_function_iterator(std::make_pair(value_type(0), begin), [](std::pair<value_type, Iterator>& state) { ++state.first; ++state.second; }, [](std::pair<value_type, Iterator> const& state) { return *state.second - state.first; }); compact_elias_fano::write(bvb, new_begin, new_universe, n, params); }
static void write(succinct::bit_vector_builder& bvb, Iterator begin, uint64_t universe, uint64_t n, global_parameters const& params) { assert(n > 0); auto cumulative_begin = make_function_iterator(std::make_pair(uint64_t(*begin), begin), [](std::pair<uint64_t, Iterator>& state) { state.first += *++state.second; //mystifying, *(++(state.second)) }, [](std::pair<uint64_t, Iterator> const& state) { return state.first; }); base_sequence_type::write(bvb, cumulative_begin, universe, n, params); }
constexpr void reinit_vector_fn(matrix< M, C, R >& m, F&& f){ static_assert((C == 1_C && R != 0_R) || (C != 0_C && R == 1_R), "reinit_vector_fn is only allowed for compile time dim vectors"); reinit_iter(m, make_function_iterator(static_cast< F&& >(f))); }
constexpr void reinit_fn(matrix< M, C, R >& m, F&& f){ reinit_iter(m, make_function_iterator(make_function_xy_adapter( static_cast< F&& >(f), m.cols()))); }