blob: be77ac65bc48b40305c89080c7acd7adefa04eac (
plain)
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
|
#include "data_header_reader.hpp"
#include "data_header.hpp"
#include "../coding/file_reader.hpp"
#include "../coding/file_writer.hpp"
#include "../base/start_mem_debug.hpp"
namespace feature
{
uint64_t GetSkipHeaderSize(Reader const & reader)
{
uint64_t const headerSize = ReadPrimitiveFromPos<uint64_t>(reader, 0);
return headerSize + sizeof(uint64_t);
}
uint64_t ReadDataHeader(string const & datFileName, feature::DataHeader & outHeader)
{
try
{
FileReader reader(datFileName);
uint64_t const toSkip = GetSkipHeaderSize(reader);
ReaderSource<FileReader> src(reader);
src.Skip(sizeof(uint64_t));
outHeader.Load(src);
return toSkip;
}
catch (Reader::Exception const & e)
{
ASSERT(false, ("Error reading header from dat file", e.what()));
return 0;
}
}
void WriteDataHeader(Writer & writer, feature::DataHeader const & header)
{
typedef vector<unsigned char> TBuffer;
TBuffer buffer;
MemWriter<TBuffer> w(buffer);
header.Save(w);
uint64_t const sz = buffer.size();
WriteToSink(writer, sz);
if (sz > 0)
writer.Write(&buffer[0], buffer.size());
}
}
|