| /* | |
| * | |
| * 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 <grpc/byte_buffer.h> | |
| #include <grpc/byte_buffer_reader.h> | |
| #include <grpcpp/impl/grpc_library.h> | |
| #include <grpcpp/support/byte_buffer.h> | |
| namespace grpc { | |
| static internal::GrpcLibraryInitializer g_gli_initializer; | |
| Status ByteBuffer::Dump(std::vector<Slice>* 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 |