blob: e05df9621076d7e34f79f17fa15fbab78d74b2c9 [file] [log] [blame]
// Copyright 2022 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
#include <mutex>
#include "rpc_demo/deque_stream.h"
pw::StatusWithSize DequeReadWriter::DoRead(pw::ByteSpan destination) {
size_t count = 0;
std::lock_guard lock(mutex_);
while (!buff_.empty() && count < destination.size_bytes()) {
destination[count++] = buff_.front();
buff_.pop_front();
}
auto status = (count == 0) ? pw::Status::OutOfRange() : pw::OkStatus();
return pw::StatusWithSize(status, count);
}
pw::Status DequeReadWriter::DoWrite(pw::ConstByteSpan data) {
std::lock_guard lock(mutex_);
for (size_t i = 0; i < data.size_bytes(); ++i) {
buff_.push_back(data[i]);
}
return pw::OkStatus();
}