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"
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
) {
34 bool ByteReader::ReadBytes(size_t len
, Input
* out
) {
37 *out
= Input(data_
, len
);
42 // Returns whether there is any more data to be read.
43 bool ByteReader::HasMore() {
47 Mark
ByteReader::NewMark() {
51 bool ByteReader::AdvanceToMark(Mark mark
) {
52 if (mark
.ptr_
< data_
)
54 // mark.ptr_ >= data_, so no concern of integer underflow here.
55 size_t advance_len
= mark
.ptr_
- data_
;
56 if (advance_len
> len_
)
62 bool ByteReader::ReadToMark(Mark mark
, Input
* out
) {
63 if (mark
.ptr_
< data_
)
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
) {
76 Mark
Mark::NullMark() {
80 bool Mark::IsEmpty() {
81 return ptr_
== nullptr;
84 Mark::Mark(const uint8_t* ptr
) : ptr_(ptr
) {
87 Mark::Mark() : ptr_(nullptr) {