| // 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 |