| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2014 the V8 project authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 | 
|  | 6 #include "src/snapshot-source-sink.h" | 
|  | 7 #include "src/checks.h" | 
|  | 8 | 
|  | 9 #include "src/handles-inl.h" | 
|  | 10 #include "src/serialize.h"  // for SerializerDeserializer::nop() in AtEOF() | 
|  | 11 | 
|  | 12 | 
|  | 13 namespace v8 { | 
|  | 14 namespace internal { | 
|  | 15 | 
|  | 16 | 
|  | 17 SnapshotByteSource::SnapshotByteSource(const byte* array, int length) | 
|  | 18     : data_(array), length_(length), position_(0) { | 
|  | 19 } | 
|  | 20 | 
|  | 21 | 
|  | 22 SnapshotByteSource::~SnapshotByteSource() { } | 
|  | 23 | 
|  | 24 | 
|  | 25 int32_t SnapshotByteSource::GetUnalignedInt() { | 
|  | 26   ASSERT(position_ < length_);  // Require at least one byte left. | 
|  | 27 #if defined(V8_HOST_CAN_READ_UNALIGNED) &&  __BYTE_ORDER == __LITTLE_ENDIAN | 
|  | 28   int32_t answer = *reinterpret_cast<const int32_t*>(data_ + position_); | 
|  | 29 #else | 
|  | 30   int32_t answer = data_[position_]; | 
|  | 31   answer |= data_[position_ + 1] << 8; | 
|  | 32   answer |= data_[position_ + 2] << 16; | 
|  | 33   answer |= data_[position_ + 3] << 24; | 
|  | 34 #endif | 
|  | 35   return answer; | 
|  | 36 } | 
|  | 37 | 
|  | 38 | 
|  | 39 void SnapshotByteSource::CopyRaw(byte* to, int number_of_bytes) { | 
|  | 40   MemCopy(to, data_ + position_, number_of_bytes); | 
|  | 41   position_ += number_of_bytes; | 
|  | 42 } | 
|  | 43 | 
|  | 44 | 
|  | 45 void SnapshotByteSink::PutInt(uintptr_t integer, const char* description) { | 
|  | 46   ASSERT(integer < 1 << 22); | 
|  | 47   integer <<= 2; | 
|  | 48   int bytes = 1; | 
|  | 49   if (integer > 0xff) bytes = 2; | 
|  | 50   if (integer > 0xffff) bytes = 3; | 
|  | 51   integer |= bytes; | 
|  | 52   Put(static_cast<int>(integer & 0xff), "IntPart1"); | 
|  | 53   if (bytes > 1) Put(static_cast<int>((integer >> 8) & 0xff), "IntPart2"); | 
|  | 54   if (bytes > 2) Put(static_cast<int>((integer >> 16) & 0xff), "IntPart3"); | 
|  | 55 } | 
|  | 56 | 
|  | 57 void SnapshotByteSink::PutRaw(byte* data, int number_of_bytes, | 
|  | 58                               const char* description) { | 
|  | 59   for (int i = 0; i < number_of_bytes; ++i) { | 
|  | 60     Put(data[i], description); | 
|  | 61   } | 
|  | 62 } | 
|  | 63 | 
|  | 64 void SnapshotByteSink::PutBlob(byte* data, int number_of_bytes, | 
|  | 65                                const char* description) { | 
|  | 66   PutInt(number_of_bytes, description); | 
|  | 67   PutRaw(data, number_of_bytes, description); | 
|  | 68 } | 
|  | 69 | 
|  | 70 | 
|  | 71 bool SnapshotByteSource::AtEOF() { | 
|  | 72   if (0u + length_ - position_ > 2 * sizeof(uint32_t)) return false; | 
|  | 73   for (int x = position_; x < length_; x++) { | 
|  | 74     if (data_[x] != SerializerDeserializer::nop()) return false; | 
|  | 75   } | 
|  | 76   return true; | 
|  | 77 } | 
|  | 78 | 
|  | 79 | 
|  | 80 bool SnapshotByteSource::GetBlob(const byte** data, int* number_of_bytes) { | 
|  | 81   int size = GetInt(); | 
|  | 82   *number_of_bytes = size; | 
|  | 83 | 
|  | 84   if (position_ + size < length_) { | 
|  | 85     *data = &data_[position_]; | 
|  | 86     Advance(size); | 
|  | 87     return true; | 
|  | 88   } else { | 
|  | 89     Advance(length_ - position_);  // proceed until end. | 
|  | 90     return false; | 
|  | 91   } | 
|  | 92 } | 
|  | 93 | 
|  | 94 }  // namespace v8::internal | 
|  | 95 }  // namespace v8 | 
| OLD | NEW | 
|---|