Vowpal Wabbit
Classes | Macros | Functions
io_buf.h File Reference
#include <sys/types.h>
#include <unistd.h>
#include <cstdio>
#include <fcntl.h>
#include "v_array.h"
#include <iostream>
#include <sstream>
#include <cerrno>
#include <stdexcept>
#include "hash.h"
#include "vw_exception.h"
#include "vw_validate.h"

Go to the source code of this file.

Classes

class  io_buf
 

Macros

#define O_LARGEFILE   0
 
#define writeit(what, str)
 
#define writeitvar(what, str, mywhat)
 

Functions

bool isbinary (io_buf &i)
 
size_t readto (io_buf &i, char *&pointer, char terminal)
 
size_t bin_read (io_buf &i, char *data, size_t len, const char *read_message)
 
size_t bin_write (io_buf &o, const char *data, uint32_t len)
 
size_t bin_text_write (io_buf &io, char *data, size_t len, std::stringstream &msg, bool text)
 
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)
 
size_t bin_text_write_fixed (io_buf &io, char *data, size_t len, std::stringstream &msg, bool text)
 
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)
 
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)
 

Macro Definition Documentation

◆ O_LARGEFILE

#define O_LARGEFILE   0

Definition at line 24 of file io_buf.h.

Referenced by io_buf::open_file(), and parse_output_preds().

◆ writeit

#define writeit (   what,
  str 
)
Value:
do \
{ \
msg << str << " = " << what << " "; \
bin_text_read_write_fixed(model_file, (char*)&what, sizeof(what), "", read, msg, text); \
} while (0);

Definition at line 349 of file io_buf.h.

Referenced by memory_tree_ns::save_load_example(), memory_tree_ns::save_load_memory_tree(), memory_tree_ns::save_load_node(), and recall_tree_ns::save_load_tree().

◆ writeitvar

#define writeitvar (   what,
  str,
  mywhat 
)
Value:
auto mywhat = (what); \
do \
{ \
msg << str << " = " << mywhat << " "; \
bin_text_read_write_fixed(model_file, (char*)&mywhat, sizeof(mywhat), "", read, msg, text); \
} while (0);

Definition at line 356 of file io_buf.h.

Referenced by memory_tree_ns::save_load_example(), memory_tree_ns::save_load_memory_tree(), memory_tree_ns::save_load_node(), and recall_tree_ns::save_load_tree().

Function Documentation

◆ bin_read()

size_t bin_read ( io_buf i,
char *  data,
size_t  len,
const char *  read_message 
)
inline

Definition at line 272 of file io_buf.h.

References io_buf::bin_read_fixed(), and THROW.

Referenced by bin_text_read_write().

273 {
274  uint32_t obj_len;
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!");
278 
279  ret += i.bin_read_fixed(data, obj_len, read_message);
280 
281  return ret;
282 }
size_t bin_read_fixed(char *data, size_t len, const char *read_message)
Definition: io_buf.h:230
#define THROW(args)
Definition: vw_exception.h:181

◆ bin_text_read_write()

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 
)
inline

Definition at line 304 of file io_buf.h.

References bin_read(), and bin_text_write().

Referenced by save_load_header().

306 {
307  if (read)
308  return bin_read(io, data, len, read_message);
309  else
310  return bin_text_write(io, data, len, msg, text);
311 }
size_t bin_text_write(io_buf &io, char *data, size_t len, std::stringstream &msg, bool text)
Definition: io_buf.h:291
size_t bin_read(io_buf &i, char *data, size_t len, const char *read_message)
Definition: io_buf.h:272

◆ bin_text_read_write_fixed()

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 
)
inline

Definition at line 326 of file io_buf.h.

References io_buf::bin_read_fixed(), and bin_text_write_fixed().

Referenced by bin_text_read_write_fixed_validated(), SVRG::save_load(), MARGINAL::save_load(), CB_ADF::save_load(), GD::save_load(), save_load(), GD::save_load_online_state(), save_load_sampling(), save_load_svm_model(), and save_load_tree().

328 {
329  if (read)
330  return io.bin_read_fixed(data, len, read_message);
331  else
332  return bin_text_write_fixed(io, data, len, msg, text);
333 }
size_t bin_text_write_fixed(io_buf &io, char *data, size_t len, std::stringstream &msg, bool text)
Definition: io_buf.h:313
size_t bin_read_fixed(char *data, size_t len, const char *read_message)
Definition: io_buf.h:230

◆ bin_text_read_write_fixed_validated()

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 
)
inline

Definition at line 335 of file io_buf.h.

References bin_text_read_write_fixed(), and THROW.

Referenced by MWT::save_load(), MARGINAL::save_load(), and save_load_header().

337 {
338  size_t nbytes = bin_text_read_write_fixed(io, data, len, read_message, read, msg, text);
339  if (read && len > 0) // only validate bytes read/write if expected length > 0
340  {
341  if (nbytes == 0)
342  {
343  THROW("Unexpected end of file encountered.");
344  }
345  }
346  return nbytes;
347 }
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)
Definition: io_buf.h:326
#define THROW(args)
Definition: vw_exception.h:181

◆ bin_text_write()

size_t bin_text_write ( io_buf io,
char *  data,
size_t  len,
std::stringstream &  msg,
bool  text 
)
inline

Definition at line 291 of file io_buf.h.

References bin_write(), and io_buf::bin_write_fixed().

Referenced by bin_text_read_write().

292 {
293  if (text)
294  {
295  size_t temp = io.bin_write_fixed(msg.str().c_str(), msg.str().size());
296  msg.str("");
297  return temp;
298  }
299  else
300  return bin_write(io, data, (uint32_t)len);
301 }
size_t bin_write(io_buf &o, const char *data, uint32_t len)
Definition: io_buf.h:284
size_t bin_write_fixed(const char *data, size_t len)
Definition: io_buf.h:252

◆ bin_text_write_fixed()

size_t bin_text_write_fixed ( io_buf io,
char *  data,
size_t  len,
std::stringstream &  msg,
bool  text 
)
inline

Definition at line 313 of file io_buf.h.

References io_buf::bin_write_fixed().

Referenced by bin_text_read_write_fixed(), save_load(), GD::save_load_online_state(), GD::save_load_regressor(), save_load_regularizer(), save_load_sampling(), and GD::write_index().

314 {
315  if (text)
316  {
317  size_t temp = io.bin_write_fixed(msg.str().c_str(), msg.str().size());
318  msg.str("");
319  return temp;
320  }
321  else
322  return io.bin_write_fixed(data, len);
323 }
size_t bin_write_fixed(const char *data, size_t len)
Definition: io_buf.h:252

◆ bin_write()

size_t bin_write ( io_buf o,
const char *  data,
uint32_t  len 
)
inline

Definition at line 284 of file io_buf.h.

References io_buf::bin_write_fixed().

Referenced by bin_text_write().

285 {
286  o.bin_write_fixed((char*)&len, sizeof(len));
287  o.bin_write_fixed(data, len);
288  return (len + sizeof(len));
289 }
size_t bin_write_fixed(const char *data, size_t len)
Definition: io_buf.h:252

◆ isbinary()

bool isbinary ( io_buf i)

Definition at line 45 of file io_buf.cc.

References io_buf::current, v_array< T >::end(), io_buf::files, io_buf::fill(), io_buf::head, and io_buf::space.

Referenced by io_buf::bin_write_fixed(), enable_sources(), and reset_source().

46 {
47  if (i.space.end() == i.head)
48  if (i.fill(i.files[i.current]) <= 0)
49  return false;
50 
51  bool ret = (*i.head == 0);
52  if (ret)
53  i.head++;
54 
55  return ret;
56 }
size_t current
Definition: io_buf.h:66
char * head
Definition: io_buf.h:67
ssize_t fill(int f)
Definition: io_buf.h:171
v_array< int > files
Definition: io_buf.h:64
v_array< char > space
Definition: io_buf.h:62
T *& end()
Definition: v_array.h:43

◆ readto()

size_t readto ( io_buf i,
char *&  pointer,
char  terminal 
)

Definition at line 58 of file io_buf.cc.

References v_array< T >::begin(), io_buf::current, v_array< T >::end(), v_array< T >::end_array, io_buf::files, io_buf::fill(), io_buf::head, readto(), v_array< T >::size(), and io_buf::space.

Referenced by io_buf::bin_write_fixed(), read_features(), and readto().

59 {
60  // Return a pointer to the bytes before the terminal. Must be less than the buffer size.
61  pointer = i.head;
62  while (pointer < i.space.end() && *pointer != terminal) pointer++;
63  if (pointer != i.space.end())
64  {
65  size_t n = pointer - i.head;
66  i.head = pointer + 1;
67  pointer -= n;
68  return n + 1;
69  }
70  else
71  {
72  if (i.space.end() == i.space.end_array)
73  {
74  size_t left = i.space.end() - i.head;
75  memmove(i.space.begin(), i.head, left);
76  i.head = i.space.begin();
77  i.space.end() = i.space.begin() + left;
78  pointer = i.space.end();
79  }
80  if (i.current < i.files.size() && i.fill(i.files[i.current]) > 0) // more bytes are read.
81  return readto(i, pointer, terminal);
82  else if (++i.current < i.files.size()) // no more bytes, so go to next file.
83  return readto(i, pointer, terminal);
84  else // no more bytes to read, return everything we have.
85  {
86  size_t n = pointer - i.head;
87  i.head = pointer;
88  pointer -= n;
89  return n;
90  }
91  }
92 }
size_t current
Definition: io_buf.h:66
T *& begin()
Definition: v_array.h:42
size_t size() const
Definition: v_array.h:68
char * head
Definition: io_buf.h:67
ssize_t fill(int f)
Definition: io_buf.h:171
size_t readto(io_buf &i, char *&pointer, char terminal)
Definition: io_buf.cc:58
v_array< int > files
Definition: io_buf.h:64
v_array< char > space
Definition: io_buf.h:62
T *& end()
Definition: v_array.h:43
T * end_array
Definition: v_array.h:38