30 #define USE_PTHREADS 1
35 size_t chunk_write_data(
void *buffer,
size_t size,
size_t nmemb,
void *data);
45 std::string d_data_url;
46 std::string d_query_marker;
47 unsigned long long d_size;
48 unsigned long long d_offset;
50 std::vector<unsigned int> d_chunk_position_in_array;
55 unsigned long long d_bytes_read;
57 unsigned long long d_read_buffer_size;
61 static const std::string tracking_context;
63 friend class ChunkTest;
64 friend class DmrppCommonTest;
68 void _duplicate(
const Chunk &bs)
73 d_read_buffer_size = 0;
75 d_is_inflated =
false;
78 d_offset = bs.d_offset;
79 d_data_url = bs.d_data_url;
80 d_query_marker = bs.d_query_marker;
81 d_chunk_position_in_array = bs.d_chunk_position_in_array;
96 d_data_url(
""), d_query_marker(
""), d_size(0), d_offset(0), d_bytes_read(0), d_read_buffer(0),
97 d_read_buffer_size(0), d_is_read(false), d_is_inflated(false)
110 Chunk(
const std::string &data_url,
unsigned long long size,
unsigned long long offset, std::string pia_str =
"") :
111 d_data_url(data_url), d_query_marker(
""), d_size(size), d_offset(offset), d_bytes_read(0), d_read_buffer(0),
112 d_read_buffer_size(0), d_is_read(false), d_is_inflated(false)
127 Chunk(
const std::string &data_url,
unsigned long long size,
unsigned long long offset,
const std::vector<unsigned int> &pia_vec) :
128 d_data_url(data_url), d_query_marker(
""), d_size(size), d_offset(offset), d_bytes_read(0), d_read_buffer(0),
129 d_read_buffer_size(0), d_is_read(false), d_is_inflated(false)
142 delete[] d_read_buffer;
151 if (
this == &rhs)
return *
this;
182 if (!d_query_marker.empty()) {
183 return d_data_url + d_query_marker;
194 d_data_url = data_url;
211 d_bytes_read = bytes_read;
224 delete[] d_read_buffer;
226 d_read_buffer =
new char[d_size];
227 d_read_buffer_size = d_size;
237 return d_read_buffer;
251 virtual void set_rbuf(
char *buf,
unsigned int size)
253 delete[] d_read_buffer;
256 d_read_buffer_size = size;
266 return d_read_buffer_size;
274 return d_chunk_position_in_array;
284 virtual void inflate_chunk(
bool deflate,
bool shuffle,
unsigned int chunk_size,
unsigned int elem_width);
286 virtual void set_is_read(
bool state) { d_is_read = state; }
288 virtual bool get_is_inflated()
const {
return d_is_inflated; }
289 virtual void set_is_inflated(
bool state) { d_is_inflated = state; }
293 virtual void dump(std::ostream & strm)
const;
295 virtual std::string to_string()
const;
300 struct inflate_chunk_args {
304 unsigned int chunk_size;
305 unsigned int elem_width;
307 inflate_chunk_args(Chunk *c,
bool d,
bool s,
unsigned int c_size,
unsigned int e_size):
308 chunk(c), deflate(d), shuffle(s), chunk_size(c_size), elem_width(e_size) {}
311 void *inflate_chunk(
void *args);
virtual void set_bytes_read(unsigned long long bytes_read)
Set the size of this Chunk's data block.
virtual void dump(std::ostream &strm) const
Chunk(const std::string &data_url, unsigned long long size, unsigned long long offset, const std::vector< unsigned int > &pia_vec)
Get a chunk initialized with values.
virtual void set_data_url(const std::string &data_url)
Get the data url string for this Chunk's data block.
virtual void read_chunk()
virtual void add_tracking_query_param()
Modify this chunk's data URL so that it includes tracking info.
virtual void inflate_chunk(bool deflate, bool shuffle, unsigned int chunk_size, unsigned int elem_width)
Decompress data in the chunk, managing the Chunk's data buffers.
virtual std::string get_curl_range_arg_string()
Returns a curl range argument. The libcurl requires a string argument for range-ge activitys,...
virtual void set_rbuf(char *buf, unsigned int size)
Set the read buffer.
Chunk & operator=(const Chunk &rhs)
Chunk()
Get an empty chunk.
virtual std::string get_data_url() const
Get the data url string for this Chunk's data block.
virtual const std::vector< unsigned int > & get_position_in_array() const
virtual void set_rbuf_to_size()
Allocates the internal read buffer to be d_size bytes.
virtual unsigned long long get_offset() const
Get the offset to this Chunk's data block.
virtual unsigned long long get_bytes_read() const
Get the number of bytes read so far for this Chunk.
virtual void set_position_in_array(const std::string &pia)
parse the chunk position string
virtual unsigned long long get_rbuf_size() const
Chunk(const std::string &data_url, unsigned long long size, unsigned long long offset, std::string pia_str="")
Get a chunk initialized with values.
virtual unsigned long long get_size() const
Get the size of this Chunk's data block on disk.
virtual char * get_rbuf()