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

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Koronchik <denis@mapswithme.com>2014-09-16 12:05:39 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:28:17 +0300
commitd8f3008ecc7300e87262308e753c7bf3d850c9e9 (patch)
tree44b2d2bc6df3299d66681a200bf4d7f2962f4d59 /coding/file_container.hpp
parentb353a8adaef05206e4bf6769695e566d8e5989ce (diff)
[coding] Implement FileMappingContainer
Diffstat (limited to 'coding/file_container.hpp')
-rw-r--r--coding/file_container.hpp50
1 files changed, 47 insertions, 3 deletions
diff --git a/coding/file_container.hpp b/coding/file_container.hpp
index aa42a0f4a9..a9d8011098 100644
--- a/coding/file_container.hpp
+++ b/coding/file_container.hpp
@@ -23,6 +23,13 @@ public:
friend string DebugPrint(Info const & info);
};
+ Info const * GetInfo(Tag const & tag) const;
+
+ bool IsExist(Tag const & tag) const
+ {
+ return GetInfo(tag) != 0;
+ }
+
protected:
struct LessInfo
{
@@ -74,7 +81,6 @@ protected:
}
};
-
typedef vector<Info> InfoContainer;
InfoContainer m_info;
@@ -94,8 +100,6 @@ public:
ReaderT GetReader(Tag const & tag) const;
- bool IsReaderExist(Tag const & tag) const;
-
template <typename F> void ForEachTag(F f) const
{
for (size_t i = 0; i < m_info.size(); ++i)
@@ -109,6 +113,46 @@ private:
ReaderT m_source;
};
+class FilesMappingContainer : public FilesContainerBase
+{
+public:
+ explicit FilesMappingContainer(string const & fName);
+ ~FilesMappingContainer();
+
+ class Handle
+ {
+ public:
+ Handle()
+ : m_base(0), m_origBase(0), m_size(0), m_origSize(0)
+ {
+ }
+
+ Handle(char const * base, char const * alignBase, uint64_t size, uint64_t origSize)
+ : m_base(base), m_origBase(alignBase), m_size(size), m_origSize(origSize)
+ {
+ }
+
+ ~Handle();
+
+ void Unmap();
+
+ bool IsValid() const { return (m_base != 0 && m_size > 0); }
+ uint64_t GetSize() const { return m_size; }
+ char const * GetData() const { return m_base; }
+
+ private:
+ char const * m_base;
+ char const * m_origBase;
+ uint64_t m_size;
+ uint64_t m_origSize;
+ };
+
+ Handle Map(Tag const & tag) const;
+
+private:
+ int m_fd;
+};
+
class FilesContainerW : public FilesContainerBase
{
public: