static std::pair<region_t, region_t> split_region(region_t && r, std::size_t dim, value_type value, bool up) { if ((up && r.box[dim].second <= value) || (!up && r.box[dim].first >= value)) return std::make_pair(region_t(), std::move(r)); if ((up && r.box[dim].first >= value) || (!up && r.box[dim].second <= value)) return std::make_pair(std::move(r), region_t()); region_t retained(std::move(r)); region_t removed(retained); retained.box[dim].first = value; removed.box[dim].second = value; if (up) return std::make_pair(std::move(retained), std::move(removed)); else return std::make_pair(std::move(removed), std::move(retained)); }
region_t get_region() const { if (left_key == right_key) { return region_t::empty(); } else { key_range_t kr; kr.left = left_key.key(); kr.right = right_key; return region_t(beg_hash, end_hash, kr); } }