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