/* * * Copyright 2015 gRPC 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 * * http://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 #include #include #include namespace grpc { static internal::GrpcLibraryInitializer g_gli_initializer; Status ByteBuffer::Dump(std::vector* slices) const { slices->clear(); if (!buffer_) { return Status(StatusCode::FAILED_PRECONDITION, "Buffer not initialized"); } grpc_byte_buffer_reader reader; if (!grpc_byte_buffer_reader_init(&reader, buffer_)) { return Status(StatusCode::INTERNAL, "Couldn't initialize byte buffer reader"); } grpc_slice s; while (grpc_byte_buffer_reader_next(&reader, &s)) { slices->push_back(Slice(s, Slice::STEAL_REF)); } grpc_byte_buffer_reader_destroy(&reader); return Status::OK; } ByteBuffer::ByteBuffer(const ByteBuffer& buf) : buffer_(nullptr) { operator=(buf); } ByteBuffer& ByteBuffer::operator=(const ByteBuffer& buf) { if (this != &buf) { Clear(); // first remove existing data } if (buf.buffer_) { buffer_ = grpc_byte_buffer_copy(buf.buffer_); // then copy } return *this; } } // namespace grpc