|  | // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "net/base/test_data_stream.h" | 
|  | #include "starboard/memory.h" | 
|  |  | 
|  | namespace net { | 
|  |  | 
|  | TestDataStream::TestDataStream() { | 
|  | Reset(); | 
|  | } | 
|  |  | 
|  | // Fill |buffer| with |length| bytes of data from the stream. | 
|  | void TestDataStream::GetBytes(char* buffer, int length) { | 
|  | while (length) { | 
|  | AdvanceIndex(); | 
|  | int bytes_to_copy = std::min(length, bytes_remaining_); | 
|  | memcpy(buffer, buffer_ptr_, bytes_to_copy); | 
|  | buffer += bytes_to_copy; | 
|  | Consume(bytes_to_copy); | 
|  | length -= bytes_to_copy; | 
|  | } | 
|  | } | 
|  |  | 
|  | bool TestDataStream::VerifyBytes(const char *buffer, int length) { | 
|  | while (length) { | 
|  | AdvanceIndex(); | 
|  | int bytes_to_compare = std::min(length, bytes_remaining_); | 
|  | if (memcmp(buffer, buffer_ptr_, bytes_to_compare)) | 
|  | return false; | 
|  | Consume(bytes_to_compare); | 
|  | length -= bytes_to_compare; | 
|  | buffer += bytes_to_compare; | 
|  | } | 
|  | return true; | 
|  | } | 
|  |  | 
|  | void TestDataStream::Reset() { | 
|  | index_ = 0; | 
|  | bytes_remaining_ = 0; | 
|  | buffer_ptr_ = buffer_; | 
|  | } | 
|  |  | 
|  | // If there is no data spilled over from the previous index, advance the | 
|  | // index and fill the buffer. | 
|  | void TestDataStream::AdvanceIndex() { | 
|  | if (bytes_remaining_ == 0) { | 
|  | // Convert it to ascii, but don't bother to reverse it. | 
|  | // (e.g. 12345 becomes "54321") | 
|  | int val = index_++; | 
|  | do { | 
|  | buffer_[bytes_remaining_++] = (val % 10) + '0'; | 
|  | } while ((val /= 10) > 0); | 
|  | buffer_[bytes_remaining_++] = '.'; | 
|  | } | 
|  | } | 
|  |  | 
|  | // Consume data from the spill buffer. | 
|  | void TestDataStream::Consume(int bytes) { | 
|  | bytes_remaining_ -= bytes; | 
|  | if (bytes_remaining_) | 
|  | buffer_ptr_ += bytes; | 
|  | else | 
|  | buffer_ptr_ = buffer_; | 
|  | } | 
|  |  | 
|  | }  // namespace net |