-
Notifications
You must be signed in to change notification settings - Fork 0
/
settings.h
110 lines (96 loc) · 1.88 KB
/
settings.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
Copyright (c) by Alexander Trufanov. Released under a Simplified BSD
license as described in the file LICENSE.
*/
#ifndef SETTINGS_H
#define SETTINGS_H
#include <vector>
#ifdef WIN32
#include <io.h>
#endif
#include <cstdio>
#include "io_buf.h"
#include "metadata.h"
enum ShuftSources
{
SOURCE_STDIN,
SOURCE_FILE,
SOURCE_INPUT_RANGE
};
enum SuftDestinations
{
DEST_STDOUT,
DEST_FILE
};
struct FileData
{
private:
string _filename;
public:
io_buf file_stream;
string filename() {return _filename;}
int setFilename(string fn, int flag = io_buf::READ)
{
_filename = fn;
return file_stream.open_file(fn.data(), flag);
}
};
struct TempFileData
{
private:
std::FILE* _ptr;
public:
io_buf file_stream;
std::FILE* ptr() {return _ptr;}
void setPtr(std::FILE* f)
{
_ptr = f;
#ifdef _WIN32
if (f) file_stream.file = _fileno(_ptr);
#else
if (f) file_stream.file = fileno(_ptr);
#endif
}
};
struct IRData
{
size_t max;
size_t min;
TempFileData tempFile;
};
struct ShuftSettings
{
size_t buffer_size;
size_t start_line;
size_t end_line;
size_t header;
size_t output_limit;
bool verbose;
ShuftSources src;
void* src_data;
SuftDestinations dst;
void* dst_data;
vector< Block > metadata;
string temp_filename;
ShuftSettings(): src_data(NULL), dst_data(NULL)
{
}
~ShuftSettings()
{
if (dst_data)
{
if (dst == DEST_FILE) delete (FileData*)dst_data;
else delete (io_buf*)dst_data;
}
if (src_data)
{
if (src == SOURCE_FILE)
delete (FileData*)src_data;
else if (src == SOURCE_STDIN)
delete (TempFileData*)src_data;
else delete (IRData*)src_data;
}
}
};
extern ShuftSettings settings;
#endif // SETTINGS_H