Welcome to mirror list, hosted at ThFree Co, Russian Federation.

data_header_reader.cpp « storage - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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());
  }

}