blob: 059470b6e237f1700e9e529eb36bf85cf2c951e3 (
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
55
56
57
58
59
60
61
62
63
64
65
|
#pragma once
#include "geometry/rect2d.hpp"
#include "coding/file_writer.hpp"
#include "std/limits.hpp"
#include "std/string.hpp"
#include "std/vector.hpp"
class FeatureBuilder1;
namespace feature
{
// Writes features to dat file.
class FeaturesCollector
{
char m_writeBuffer[48000];
size_t m_writePosition = 0;
uint32_t m_featureID = 0;
protected:
static uint32_t constexpr kInvalidFeatureId = numeric_limits<uint32_t>::max();
FileWriter m_datFile;
m2::RectD m_bounds;
private:
void Write(char const * src, size_t size);
void FlushBuffer();
protected:
static uint32_t GetFileSize(FileWriter const & f);
/// @return feature offset in the file, which is used as an ID later
uint32_t WriteFeatureBase(vector<char> const & bytes, FeatureBuilder1 const & fb);
void Flush();
public:
FeaturesCollector(string const & fName);
virtual ~FeaturesCollector();
string const & GetFilePath() const { return m_datFile.GetName(); }
/// \brief Serializes |f|.
/// \returns feature id of serialized feature if |f| is serialized after the call
/// and |kInvalidFeatureId| if not.
/// \note See implementation operator() in derived class for cases when |f| cannot be
/// serialized.
virtual uint32_t operator()(FeatureBuilder1 const & f);
};
class FeaturesAndRawGeometryCollector : public FeaturesCollector
{
FileWriter m_rawGeometryFileStream;
size_t m_rawGeometryCounter = 0;
public:
FeaturesAndRawGeometryCollector(string const & featuresFileName,
string const & rawGeometryFileName);
~FeaturesAndRawGeometryCollector();
uint32_t operator()(FeatureBuilder1 const & f) override;
};
}
|