Address some minor nits in net/der.
[chromium-blink-merge.git] / net / der / input.cc
blobf896bb815d74de6abfa2d39add5f2b283920a4bb
1 // Copyright 2015 The Chromium 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.
5 #include "base/logging.h"
6 #include "net/der/input.h"
8 namespace net {
10 namespace der {
12 Input::Input() : data_(nullptr), len_(0) {
15 Input::Input(const uint8_t* data, size_t len) : data_(data), len_(len) {
18 Input::Input(const std::string& s)
19 : data_(reinterpret_cast<const uint8_t*>(s.data())), len_(s.size()) {
22 ByteReader::ByteReader(const Input& in)
23 : data_(in.UnsafeData()), len_(in.Length()) {
26 bool ByteReader::ReadByte(uint8_t* byte_p) {
27 if (!HasMore())
28 return false;
29 *byte_p = *data_;
30 Advance(1);
31 return true;
34 bool ByteReader::ReadBytes(size_t len, Input* out) {
35 if (len > len_)
36 return false;
37 *out = Input(data_, len);
38 Advance(len);
39 return true;
42 // Returns whether there is any more data to be read.
43 bool ByteReader::HasMore() {
44 return len_ > 0;
47 Mark ByteReader::NewMark() {
48 return Mark(data_);
51 bool ByteReader::AdvanceToMark(Mark mark) {
52 if (mark.ptr_ < data_)
53 return false;
54 // mark.ptr_ >= data_, so no concern of integer underflow here.
55 size_t advance_len = mark.ptr_ - data_;
56 if (advance_len > len_)
57 return false;
58 Advance(advance_len);
59 return true;
62 bool ByteReader::ReadToMark(Mark mark, Input* out) {
63 if (mark.ptr_ < data_)
64 return false;
65 // mark.ptr_ >= data_, so no concern of integer underflow here.
66 size_t len = mark.ptr_ - data_;
67 return ReadBytes(len, out);
70 void ByteReader::Advance(size_t len) {
71 CHECK_LE(len, len_);
72 data_ += len;
73 len_ -= len;
76 Mark Mark::NullMark() {
77 return Mark();
80 bool Mark::IsEmpty() {
81 return ptr_ == nullptr;
84 Mark::Mark(const uint8_t* ptr) : ptr_(ptr) {
87 Mark::Mark() : ptr_(nullptr) {
90 } // namespace der
92 } // namespace net