6 #ifndef TURI_SARRAY_SAVING_HPP 7 #define TURI_SARRAY_SAVING_HPP 8 #include <core/storage/sframe_data/sarray.hpp> 9 #include <core/storage/sframe_data/sarray_v2_block_manager.hpp> 10 #include <core/storage/sframe_data/sframe_saving_impl.hpp> 14 void sarray_save_blockwise(
const sarray<T>& cur_column,
15 std::string index_file) {
18 v2_block_impl::block_writer writer;
21 std::string base_name;
22 size_t last_dot = index_file.find_last_of(
".");
23 if (last_dot != std::string::npos) {
24 base_name = index_file.substr(0, last_dot);
26 base_name = index_file;
28 auto index = base_name +
".sidx";
29 auto segment_file = base_name +
".0000";
32 writer.init(index, 1, 1);
33 writer.open_segment(0, segment_file);
36 sframe_saving_impl::column_blocks col;
39 col.column_index = cur_column.get_index_info();
40 if (col.column_index.segment_files.size() > 0) {
42 block_manager.open_column(col.column_index.segment_files[0]);
45 col.num_blocks_in_current_segment =
46 block_manager.num_blocks_in_column(col.segment_address);
48 col.column_number = 0;
49 col.num_segments = col.column_index.segment_files.size();
50 if (col.current_block_number >= col.num_blocks_in_current_segment) {
56 writer.get_index_info().columns[0].metadata = col.column_index.metadata;
60 v2_block_impl::block_info* infoptr =
nullptr;
61 v2_block_impl::block_info info;
63 {std::get<0>(col.segment_address),
64 std::get<1>(col.segment_address),
65 col.current_block_number};
66 auto data = block_manager.read_block(block_address , &infoptr);
69 writer.write_block(0, col.column_number, data->data(), info);
76 writer.close_segment(0);
77 writer.write_index_file();
81 block_manager.close_column(col.segment_address);
std::tuple< size_t, size_t, size_t > block_address
static block_manager & get_instance()
Get singleton instance.
void advance_column_blocks_to_next_block(v2_block_impl::block_manager &block_manager, column_blocks &block)