EPICS ARCHIVER V4
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups
DataWriter.h
1 // -*- c++ -*-
2 
3 // tools
4 #include "tools/ToolsConfig.h"
5 #include "tools/AutoPtr.h"
6 #include "tools/NoCopy.h"
7 
8 // storage
9 #include "storage/CtrlInfo.h"
10 #include "storage/RawValue.h"
11 #include "storage/Index.h"
12 
15 
22 {
23 public:
36  DataWriter(Index &index,
37  const stdString &channel_name,
38  const CtrlInfo &ctrl_info,
39  DbrType dbr_type,
40  DbrCount dbr_count,
41  double period,
42  size_t num_samples);
43 
50  ~DataWriter();
51 
58  epicsTime getLastStamp();
59 
66  bool add(const RawValue::Data *data);
67 
70 
73  static stdString data_file_name_base;
74 
80  void write(DbrType type, DbrCount count,
81  size_t size, const RawValue::Data *value,
83  class DataFile *datafile, FileOffset offset);
84 
85 public:
86 
88  dbr_time_string* write1(size_t size,
90  class DataFile *datafile);
92  void write2(dbr_time_string* buffer, size_t size,
93  const RawValue::Data *value);
94 
96  void write3(dbr_time_string* buffer);
97 
99  void write4(DbrType type, DbrCount count,
100  dbr_time_string* buffer,
101  size_t size, const RawValue::Data *value,
102  class DataFile *datafile, FileOffset offset);
103 
105  void write5a(class DataFile *datafile, FileOffset offset);
106 
108  void write5b(class DataFile *datafile, FileOffset offset);
109 
111  void write6(dbr_time_string* buffer, size_t size,
112  class DataFile *datafile, FileOffset offset);
113 
114 
115 private:
116 
117  PROHIBIT_DEFAULT_COPY(DataWriter);
118  Index &index;
119  AutoPtr<Index::Result> index_result;
120  const stdString channel_name;
121  const CtrlInfo &ctrl_info;
122  DbrType dbr_type;
123  DbrCount dbr_count;
124  double period;
125  size_t raw_value_size;
126 
127  void makeDataFileName(int serial, stdString &name);
128  DataFile *createNewDataFile(size_t headroom);
129 
130  // Sets next_buffer_size to at least 'start',
131  // so that buffers get bigger and bigger up to
132  // some limit.
133  void calc_next_buffer_size(size_t start);
134  size_t next_buffer_size;
135 
137  size_t available;
139 
140  void addNewHeader(bool new_ctrl_info);
141 };
142 
void write4(DbrType type, DbrCount count, dbr_time_string *buffer, size_t size, const RawValue::Data *value, class DataFile *datafile, FileOffset offset)
write 4
Binary Data File.
Definition: DataFile.h:32
unsigned short DbrType
DbrType is used to hold dbr_time_xxx types.
Definition: RawValue.h:24
void write6(dbr_time_string *buffer, size_t size, class DataFile *datafile, FileOffset offset)
write 6
Meta-information for values: Units, limits, etc .
Definition: CtrlInfo.h:75
static FileOffset file_size_limit
Data file size limit.
Definition: DataWriter.h:69
epicsTime getLastStamp()
Returns the last time stamp in the archive.
Writes data to storage.
Definition: DataWriter.h:21
void write(DbrType type, DbrCount count, size_t size, const RawValue::Data *value, MemoryBuffer< dbr_time_string > &cvt_buffer, class DataFile *datafile, FileOffset offset)
Write a value to binary file.
unsigned short DbrCount
DbrCount is used to hold the array size of CA channels.
Definition: RawValue.h:27
DataWriter(Index &index, const stdString &channel_name, const CtrlInfo &ctrl_info, DbrType dbr_type, DbrCount dbr_count, double period, size_t num_samples)
Create a writer for the given index.
uint32_t FileOffset
FileOffset is used as a system independent type for, well, offsets into files.
Definition: StorageTypes.h:13
static stdString data_file_name_base
Base name of data files.
Definition: DataWriter.h:73
void write3(dbr_time_string *buffer)
write 3
void write2(dbr_time_string *buffer, size_t size, const RawValue::Data *value)
write 2
void write5b(class DataFile *datafile, FileOffset offset)
write 5b
void write5a(class DataFile *datafile, FileOffset offset)
write 5a
Base interface for the archiver&#39;s indices.
Definition: Index.h:16
dbr_time_string * write1(size_t size, MemoryBuffer< dbr_time_string > &cvt_buffer, class DataFile *datafile)
write 1
dbr_time_double Data
Type for accessing the raw data and its common fields.
Definition: RawValue.h:55
bool add(const RawValue::Data *data)
Add a value.
~DataWriter()
Destructor.