23 #ifndef O_LARGEFILE // for OSX 29 #define ssize_t int64_t 71 static constexpr
int READ = 1;
76 _verify_hash = verify;
86 THROW(
"HASH WAS NOT CALCULATED");
90 virtual int open_file(
const char* name,
bool stdin_off) {
return open_file(name, stdin_off, READ); }
92 virtual int open_file(
const char* name,
bool stdin_off,
int flag = READ)
102 _sopen_s(&ret, name, _O_RDONLY | _O_BINARY | _O_SEQUENTIAL, _SH_DENYWR, 0);
109 ret = _fileno(stdin);
119 _sopen_s(&ret, name, _O_CREAT | _O_WRONLY | _O_BINARY | _O_TRUNC, _SH_DENYWR, _S_IREAD | _S_IWRITE);
121 ret = open(name, O_CREAT | O_WRONLY |
O_LARGEFILE | O_TRUNC, 0666);
128 std::cerr <<
"Unknown file operation. Something other than READ/WRITE specified" << std::endl;
131 if (ret == -1 && *name !=
'\0')
139 _lseek(f, 0, SEEK_SET);
141 lseek(f, 0, SEEK_SET);
144 head = space.
begin();
147 io_buf() : _verify_hash{
false}, _hash{0}, count{0}, current{0}
149 space = v_init<char>();
150 files = v_init<int>();
151 currentname = v_init<char>();
152 finalname = v_init<char>();
153 space.
resize(INITIAL_BUFF_SIZE);
154 head = space.
begin();
163 void set(
char* p) { head = p; }
175 size_t head_loc = head - space.
begin();
177 head = space.
begin() + head_loc;
183 space.
end() = space.
end() + num_read;
199 std::cerr <<
"error, failed to write example\n";
200 head = space.
begin();
226 void buf_write(
char*& pointer,
size_t n);
227 size_t buf_read(
char*& pointer,
size_t n);
243 if (*read_message ==
'\0')
244 memcpy(data, p, len);
245 else if (memcmp(data, p, len) != 0)
259 memcpy(p, data, len);
270 size_t readto(
io_buf& i,
char*& pointer,
char terminal);
272 inline size_t bin_read(
io_buf& i,
char* data,
size_t len,
const char* read_message)
275 size_t ret = i.
bin_read_fixed((
char*)&obj_len,
sizeof(obj_len),
"");
276 if (obj_len > len || ret <
sizeof(uint32_t))
277 THROW(
"bad model format!");
288 return (len +
sizeof(len));
300 return bin_write(io, data, (uint32_t)len);
305 io_buf& io,
char* data,
size_t len,
const char* read_message,
bool read, std::stringstream& msg,
bool text)
308 return bin_read(io, data, len, read_message);
327 io_buf& io,
char* data,
size_t len,
const char* read_message,
bool read, std::stringstream& msg,
bool text)
336 io_buf& io,
char* data,
size_t len,
const char* read_message,
bool read, std::stringstream& msg,
bool text)
343 THROW(
"Unexpected end of file encountered.");
349 #define writeit(what, str) \ 352 msg << str << " = " << what << " "; \ 353 bin_text_read_write_fixed(model_file, (char*)&what, sizeof(what), "", read, msg, text); \ 356 #define writeitvar(what, str, mywhat) \ 357 auto mywhat = (what); \ 360 msg << str << " = " << mywhat << " "; \ 361 bin_text_read_write_fixed(model_file, (char*)&mywhat, sizeof(mywhat), "", read, msg, text); \
void resize(size_t length)
virtual bool compressed()
static ssize_t write_file_or_socket(int f, const void *buf, size_t nbytes)
static constexpr int WRITE
virtual bool close_file()
size_t readto(io_buf &i, char *&pointer, char terminal)
static constexpr size_t INITIAL_BUFF_SIZE
size_t bin_text_read_write_fixed_validated(io_buf &io, char *data, size_t len, const char *read_message, bool read, std::stringstream &msg, bool text)
VW_STD14_CONSTEXPR uint64_t uniform_hash(const void *key, size_t len, uint64_t seed)
size_t bin_text_read_write(io_buf &io, char *data, size_t len, const char *read_message, bool read, std::stringstream &msg, bool text)
static bool is_socket(int f)
virtual void reset_file(int f)
virtual int open_file(const char *name, bool stdin_off, int flag=READ)
virtual ssize_t read_file(int f, void *buf, size_t nbytes)
static void close_file_or_socket(int f)
static constexpr int READ
virtual int open_file(const char *name, bool stdin_off)
v_array< char > finalname
size_t bin_text_write_fixed(io_buf &io, char *data, size_t len, std::stringstream &msg, bool text)
virtual size_t num_files()
size_t bin_read_fixed(char *data, size_t len, const char *read_message)
size_t bin_text_write(io_buf &io, char *data, size_t len, std::stringstream &msg, bool text)
size_t bin_read(io_buf &i, char *data, size_t len, const char *read_message)
void push_back(const T &new_ele)
v_array< char > currentname
void verify_hash(bool verify)
static ssize_t read_file_or_socket(int f, void *buf, size_t nbytes)
void buf_write(char *&pointer, size_t n)
size_t bin_write(io_buf &o, const char *data, uint32_t len)
size_t bin_write_fixed(const char *data, size_t len)
size_t bin_text_read_write_fixed(io_buf &io, char *data, size_t len, const char *read_message, bool read, std::stringstream &msg, bool text)
virtual ssize_t write_file(int f, const void *buf, size_t nbytes)
size_t buf_read(char *&pointer, size_t n)