aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/ijar/mapped_file.h
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2016-02-16 12:20:45 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-02-16 15:59:24 +0000
commit257337638463d01bcf627c60de42861d775fefec (patch)
tree8ec571adbfb4ba24f96dd6a5e27368c2f459d1a9 /third_party/ijar/mapped_file.h
parent0e5be36548843677b1982b2f7e96d33265cc36ea (diff)
Encapsulate file mapping in preparation for providing a Windows implementation.
Progress on #276. -- MOS_MIGRATED_REVID=114740700
Diffstat (limited to 'third_party/ijar/mapped_file.h')
-rw-r--r--third_party/ijar/mapped_file.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/third_party/ijar/mapped_file.h b/third_party/ijar/mapped_file.h
new file mode 100644
index 0000000000..ea0ee824e0
--- /dev/null
+++ b/third_party/ijar/mapped_file.h
@@ -0,0 +1,82 @@
+// Copyright 2015 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef INCLUDED_THIRD_PARTY_IJAR_MAPPED_FILE_H
+#define INCLUDED_THIRD_PARTY_IJAR_MAPPED_FILE_H
+
+#include "third_party/ijar/common.h"
+
+namespace devtools_ijar {
+
+class MappedInputFileImpl;
+class MappedOutputFileImpl;
+
+// A memory mapped input file.
+class MappedInputFile {
+ private:
+ MappedInputFileImpl *impl_;
+
+ protected:
+ const char* errmsg_;
+ bool opened_;
+ u1* buffer_;
+ size_t length_;
+
+ public:
+ MappedInputFile(const char* name);
+ virtual ~MappedInputFile();
+
+ // If opening the file succeeded or not.
+ bool Opened() const { return opened_; }
+
+ // Description of the last error that happened.
+ const char* Error() const { return errmsg_; }
+
+ // The mapped contents of the file.
+ u1* Buffer() const { return buffer_ ; }
+
+ // The length of the file.
+ size_t Length() const { return length_; }
+
+ // Unmap a given number of bytes from the beginning of the file.
+ void Discard(size_t bytes);
+ int Close();
+};
+
+class MappedOutputFile {
+ private:
+ MappedOutputFileImpl *impl_;
+
+ protected:
+ const char* errmsg_;
+ bool opened_;
+ u1* buffer_;
+
+ public:
+ MappedOutputFile(const char* name, u8 estimated_size);
+ virtual ~MappedOutputFile();
+
+ // If opening the file succeeded or not.
+ bool Opened() const { return opened_; }
+
+ // Description of the last error that happened.
+ const char* Error() const { return errmsg_; }
+
+ // The mapped contents of the file.
+ u1* Buffer() const { return buffer_; }
+ int Close(int size);
+};
+
+} // namespace devtools_ijar
+#endif