blob: 7c36b1ba3098f0bab9f8a7631ba2f36a254ed0b6 (
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
|
#pragma once
#include "features_vector.hpp"
#include "../coding/file_container.hpp"
#include "../std/bind.hpp"
namespace feature
{
template <class ToDo>
void ForEachFromDat(string const & fName, ToDo & toDo)
{
FilesContainerR container(fName);
FeaturesVector featureSource(container);
featureSource.ForEachOffset(bind<void>(ref(toDo), _1, _2));
}
/// Read feature from feature source.
template <class TSource>
void ReadFromSourceRowFormat(TSource & src, FeatureBuilder1 & f)
{
uint32_t const sz = ReadVarUint<uint32_t>(src);
typename FeatureBuilder1::buffer_t buffer(sz);
src.Read(&buffer[0], sz);
f.Deserialize(buffer);
}
/// Process features in .dat file.
template <class ToDo>
void ForEachFromDatRawFormat(string const & fName, ToDo & toDo)
{
FileReader reader(fName);
ReaderSource<FileReader> src(reader);
uint64_t currPos = 0;
uint64_t const fSize = reader.Size();
// read features one by one
while (currPos < fSize)
{
FeatureBuilder1 f;
ReadFromSourceRowFormat(src, f);
toDo(f, currPos);
currPos = src.Pos();
}
}
}
|