Vowpal Wabbit
comp_io.cc
Go to the documentation of this file.
1 #define NOMINMAX
2 #include "zlib.h"
3 #include "comp_io.h"
4 
5 int comp_io_buf::open_file(const char* name, bool stdin_off, int flag)
6 {
7  gzFile fil = nullptr;
8  int ret = -1;
9  switch (flag)
10  {
11  case READ:
12  if (*name != '\0')
13  fil = gzopen(name, "rb");
14  else if (!stdin_off)
15 #ifdef _WIN32
16  fil = gzdopen(_fileno(stdin), "rb");
17 #else
18  fil = gzdopen(fileno(stdin), "rb");
19 #endif
20  if (fil != nullptr)
21  {
22  gz_files.push_back(fil);
23  ret = (int)gz_files.size() - 1;
24  files.push_back(ret);
25  }
26  break;
27 
28  case WRITE:
29  fil = gzopen(name, "wb");
30  if (fil != nullptr)
31  {
32  gz_files.push_back(fil);
33  ret = (int)gz_files.size() - 1;
34  files.push_back(ret);
35  }
36  break;
37 
38  default:
39  std::cerr << "Unknown file operation. Something other than READ/WRITE specified" << std::endl;
40  }
41  return ret;
42 }
43 
45 {
46  gzFile fil = gz_files[f];
47  gzseek(fil, 0, SEEK_SET);
48  space.end() = space.begin();
49  head = space.begin();
50 }
51 
52 ssize_t comp_io_buf::read_file(int f, void* buf, size_t nbytes)
53 {
54  gzFile fil = gz_files[f];
55  int num_read = gzread(fil, buf, (unsigned int)nbytes);
56  return (num_read > 0) ? num_read : 0;
57 }
58 
59 size_t comp_io_buf::num_files() { return gz_files.size(); }
60 
61 ssize_t comp_io_buf::write_file(int file, const void* buf, size_t nbytes)
62 {
63  int num_written = gzwrite(gz_files[file], buf, (unsigned int)nbytes);
64  return (num_written > 0) ? num_written : 0;
65 }
66 
67 bool comp_io_buf::compressed() { return true; }
68 
70 {
71  if (write_file(0, space.begin(), head - space.end()) != (int)((head - space.end())))
72  std::cerr << "error, failed to write to cache\n";
73  head = space.begin();
74 }
75 
77 {
78  if (!gz_files.empty())
79  {
80  gzclose(gz_files.back());
81  gz_files.pop_back();
82  if (!files.empty())
83  files.pop();
84  return true;
85  }
86  return false;
87 }
T pop()
Definition: v_array.h:58
static constexpr int WRITE
Definition: io_buf.h:72
int open_file(const char *name, bool stdin_off, int flag) override
Definition: comp_io.cc:5
ssize_t read_file(int f, void *buf, size_t nbytes) override
Definition: comp_io.cc:52
T *& begin()
Definition: v_array.h:42
static constexpr int READ
Definition: io_buf.h:71
char * head
Definition: io_buf.h:67
bool close_file() override
Definition: comp_io.cc:76
size_t num_files() override
Definition: comp_io.cc:59
void push_back(const T &new_ele)
Definition: v_array.h:107
ssize_t write_file(int file, const void *buf, size_t nbytes) override
Definition: comp_io.cc:61
v_array< int > files
Definition: io_buf.h:64
void flush() override
Definition: comp_io.cc:69
v_array< char > space
Definition: io_buf.h:62
T *& end()
Definition: v_array.h:43
std::vector< gzFile > gz_files
Definition: comp_io.h:22
bool empty() const
Definition: v_array.h:59
void reset_file(int f) override
Definition: comp_io.cc:44
bool compressed() override
Definition: comp_io.cc:67
void * gzFile
Definition: comp_io.h:13
float f
Definition: cache.cc:40