| Index: src/snapshot-source-sink.h
|
| diff --git a/src/snapshot-source-sink.h b/src/snapshot-source-sink.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0911e7cf828dc3e4712eeeeeb4ee770321740a64
|
| --- /dev/null
|
| +++ b/src/snapshot-source-sink.h
|
| @@ -0,0 +1,88 @@
|
| +// Copyright 2012 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef V8_SNAPSHOT_SOURCE_SINK_H_
|
| +#define V8_SNAPSHOT_SOURCE_SINK_H_
|
| +
|
| +#include "src/checks.h"
|
| +#include "src/utils.h"
|
| +
|
| +namespace v8 {
|
| +namespace internal {
|
| +
|
| +
|
| +/**
|
| + * Source to read snapshot and builtins files from.
|
| + *
|
| + * Note: Memory ownership remains with callee.
|
| + */
|
| +class SnapshotByteSource V8_FINAL {
|
| + public:
|
| + SnapshotByteSource(const byte* array, int length);
|
| + ~SnapshotByteSource();
|
| +
|
| + bool HasMore() { return position_ < length_; }
|
| +
|
| + int Get() {
|
| + ASSERT(position_ < length_);
|
| + return data_[position_++];
|
| + }
|
| +
|
| + int32_t GetUnalignedInt();
|
| +
|
| + void Advance(int by) { position_ += by; }
|
| +
|
| + void CopyRaw(byte* to, int number_of_bytes);
|
| +
|
| + inline int GetInt() {
|
| + // This way of variable-length encoding integers does not suffer from branch
|
| + // mispredictions.
|
| + uint32_t answer = GetUnalignedInt();
|
| + int bytes = answer & 3;
|
| + Advance(bytes);
|
| + uint32_t mask = 0xffffffffu;
|
| + mask >>= 32 - (bytes << 3);
|
| + answer &= mask;
|
| + answer >>= 2;
|
| + return answer;
|
| + }
|
| +
|
| + bool GetBlob(const byte** data, int* number_of_bytes);
|
| +
|
| + bool AtEOF();
|
| +
|
| + int position() { return position_; }
|
| +
|
| + private:
|
| + const byte* data_;
|
| + int length_;
|
| + int position_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SnapshotByteSource);
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Sink to write snapshot files to.
|
| + *
|
| + * Subclasses must implement actual storage or i/o.
|
| + */
|
| +class SnapshotByteSink {
|
| + public:
|
| + virtual ~SnapshotByteSink() { }
|
| + virtual void Put(int byte, const char* description) = 0;
|
| + virtual void PutSection(int byte, const char* description) {
|
| + Put(byte, description);
|
| + }
|
| + void PutInt(uintptr_t integer, const char* description);
|
| + void PutRaw(byte* data, int number_of_bytes, const char* description);
|
| + void PutBlob(byte* data, int number_of_bytes, const char* description);
|
| + virtual int Position() = 0;
|
| +};
|
| +
|
| +
|
| +} // namespace v8::internal
|
| +} // namespace v8
|
| +
|
| +#endif // V8_SNAPSHOT_SOURCE_SINK_H_
|
|
|