mirror of https://github.com/grpc/grpc.git
commit
4942458b21
59 changed files with 1121 additions and 931 deletions
@ -1,141 +0,0 @@ |
|||||||
/*
|
|
||||||
* |
|
||||||
* Copyright 2017 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. |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef GRPCXX_IMPL_CODEGEN_BYTE_BUFFER_H |
|
||||||
#define GRPCXX_IMPL_CODEGEN_BYTE_BUFFER_H |
|
||||||
|
|
||||||
#include <grpc/impl/codegen/byte_buffer.h> |
|
||||||
|
|
||||||
#include <grpc++/impl/codegen/config.h> |
|
||||||
#include <grpc++/impl/codegen/core_codegen_interface.h> |
|
||||||
#include <grpc++/impl/codegen/serialization_traits.h> |
|
||||||
#include <grpc++/impl/codegen/slice.h> |
|
||||||
#include <grpc++/impl/codegen/status.h> |
|
||||||
|
|
||||||
#include <vector> |
|
||||||
|
|
||||||
namespace grpc { |
|
||||||
|
|
||||||
template <class R> |
|
||||||
class CallOpRecvMessage; |
|
||||||
class MethodHandler; |
|
||||||
namespace internal { |
|
||||||
template <class M, class T> |
|
||||||
class MessageDeserializer; |
|
||||||
} |
|
||||||
|
|
||||||
/// A sequence of bytes.
|
|
||||||
class ByteBuffer final { |
|
||||||
public: |
|
||||||
/// Constuct an empty buffer.
|
|
||||||
ByteBuffer() : buffer_(nullptr) {} |
|
||||||
|
|
||||||
/// Construct buffer from \a slices, of which there are \a nslices.
|
|
||||||
ByteBuffer(const Slice* slices, size_t nslices); |
|
||||||
|
|
||||||
/// Constuct a byte buffer by referencing elements of existing buffer
|
|
||||||
/// \a buf. Wrapper of core function grpc_byte_buffer_copy
|
|
||||||
ByteBuffer(const ByteBuffer& buf); |
|
||||||
|
|
||||||
~ByteBuffer() { |
|
||||||
if (buffer_) { |
|
||||||
g_core_codegen_interface->grpc_byte_buffer_destroy(buffer_); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
ByteBuffer& operator=(const ByteBuffer&); |
|
||||||
|
|
||||||
/// Dump (read) the buffer contents into \a slices.
|
|
||||||
Status Dump(std::vector<Slice>* slices) const; |
|
||||||
|
|
||||||
/// Remove all data.
|
|
||||||
void Clear() { |
|
||||||
if (buffer_) { |
|
||||||
g_core_codegen_interface->grpc_byte_buffer_destroy(buffer_); |
|
||||||
buffer_ = nullptr; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// Make a duplicate copy of the internals of this byte
|
|
||||||
/// buffer so that we have our own owned version of it.
|
|
||||||
/// bbuf.Duplicate(); is equivalent to bbuf=bbuf; but is actually readable
|
|
||||||
void Duplicate() { |
|
||||||
buffer_ = g_core_codegen_interface->grpc_byte_buffer_copy(buffer_); |
|
||||||
} |
|
||||||
|
|
||||||
/// Forget underlying byte buffer without destroying
|
|
||||||
/// Use this only for un-owned byte buffers
|
|
||||||
void Release() { buffer_ = nullptr; } |
|
||||||
|
|
||||||
/// Buffer size in bytes.
|
|
||||||
size_t Length() const; |
|
||||||
|
|
||||||
/// Swap the state of *this and *other.
|
|
||||||
void Swap(ByteBuffer* other); |
|
||||||
|
|
||||||
/// Is this ByteBuffer valid?
|
|
||||||
bool Valid() const { return (buffer_ != nullptr); } |
|
||||||
|
|
||||||
private: |
|
||||||
friend class SerializationTraits<ByteBuffer, void>; |
|
||||||
friend class CallOpSendMessage; |
|
||||||
template <class R> |
|
||||||
friend class CallOpRecvMessage; |
|
||||||
friend class CallOpGenericRecvMessage; |
|
||||||
friend class MethodHandler; |
|
||||||
template <class M, class T> |
|
||||||
friend class internal::MessageDeserializer; |
|
||||||
|
|
||||||
// takes ownership
|
|
||||||
void set_buffer(grpc_byte_buffer* buf) { |
|
||||||
if (buffer_) { |
|
||||||
Clear(); |
|
||||||
} |
|
||||||
buffer_ = buf; |
|
||||||
} |
|
||||||
|
|
||||||
grpc_byte_buffer* c_buffer() { return buffer_; } |
|
||||||
grpc_byte_buffer** c_buffer_ptr() { return &buffer_; } |
|
||||||
|
|
||||||
// DEPRECATED: Implicit conversion to transparently
|
|
||||||
// support deprecated SerializationTraits API
|
|
||||||
// No need to inline since deprecated
|
|
||||||
operator grpc_byte_buffer*(); |
|
||||||
operator const grpc_byte_buffer*() const; |
|
||||||
|
|
||||||
grpc_byte_buffer* buffer_; |
|
||||||
}; |
|
||||||
|
|
||||||
template <> |
|
||||||
class SerializationTraits<ByteBuffer, void> { |
|
||||||
public: |
|
||||||
static Status Deserialize(const ByteBuffer& byte_buffer, ByteBuffer* dest) { |
|
||||||
dest->set_buffer(byte_buffer.buffer_); |
|
||||||
return Status::OK; |
|
||||||
} |
|
||||||
static Status Serialize(const ByteBuffer& source, ByteBuffer* buffer, |
|
||||||
bool* own_buffer) { |
|
||||||
*buffer = source; |
|
||||||
*own_buffer = true; |
|
||||||
return Status::OK; |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace grpc
|
|
||||||
|
|
||||||
#endif // GRPCXX_IMPL_CODEGEN_BYTE_BUFFER_H
|
|
@ -1,86 +0,0 @@ |
|||||||
/*
|
|
||||||
* |
|
||||||
* 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. |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef GRPC_IMPL_CODEGEN_BYTE_BUFFER_H |
|
||||||
#define GRPC_IMPL_CODEGEN_BYTE_BUFFER_H |
|
||||||
|
|
||||||
#include <grpc/impl/codegen/grpc_types.h> |
|
||||||
|
|
||||||
#ifdef __cplusplus |
|
||||||
extern "C" { |
|
||||||
#endif |
|
||||||
|
|
||||||
/** Returns a RAW byte buffer instance over the given slices (up to \a nslices).
|
|
||||||
* |
|
||||||
* Increases the reference count for all \a slices processed. The user is |
|
||||||
* responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/ |
|
||||||
GRPCAPI grpc_byte_buffer *grpc_raw_byte_buffer_create(grpc_slice *slices, |
|
||||||
size_t nslices); |
|
||||||
|
|
||||||
/** Returns a *compressed* RAW byte buffer instance over the given slices (up to
|
|
||||||
* \a nslices). The \a compression argument defines the compression algorithm |
|
||||||
* used to generate the data in \a slices. |
|
||||||
* |
|
||||||
* Increases the reference count for all \a slices processed. The user is |
|
||||||
* responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/ |
|
||||||
GRPCAPI grpc_byte_buffer *grpc_raw_compressed_byte_buffer_create( |
|
||||||
grpc_slice *slices, size_t nslices, grpc_compression_algorithm compression); |
|
||||||
|
|
||||||
/** Copies input byte buffer \a bb.
|
|
||||||
* |
|
||||||
* Increases the reference count of all the source slices. The user is |
|
||||||
* responsible for calling grpc_byte_buffer_destroy over the returned copy. */ |
|
||||||
GRPCAPI grpc_byte_buffer *grpc_byte_buffer_copy(grpc_byte_buffer *bb); |
|
||||||
|
|
||||||
/** Returns the size of the given byte buffer, in bytes. */ |
|
||||||
GRPCAPI size_t grpc_byte_buffer_length(grpc_byte_buffer *bb); |
|
||||||
|
|
||||||
/** Destroys \a byte_buffer deallocating all its memory. */ |
|
||||||
GRPCAPI void grpc_byte_buffer_destroy(grpc_byte_buffer *byte_buffer); |
|
||||||
|
|
||||||
/** Reader for byte buffers. Iterates over slices in the byte buffer */ |
|
||||||
struct grpc_byte_buffer_reader; |
|
||||||
typedef struct grpc_byte_buffer_reader grpc_byte_buffer_reader; |
|
||||||
|
|
||||||
/** Initialize \a reader to read over \a buffer.
|
|
||||||
* Returns 1 upon success, 0 otherwise. */ |
|
||||||
GRPCAPI int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader, |
|
||||||
grpc_byte_buffer *buffer); |
|
||||||
|
|
||||||
/** Cleanup and destroy \a reader */ |
|
||||||
GRPCAPI void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader); |
|
||||||
|
|
||||||
/** Updates \a slice with the next piece of data from from \a reader and returns
|
|
||||||
* 1. Returns 0 at the end of the stream. Caller is responsible for calling |
|
||||||
* grpc_slice_unref on the result. */ |
|
||||||
GRPCAPI int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader, |
|
||||||
grpc_slice *slice); |
|
||||||
|
|
||||||
/** Merge all data from \a reader into single slice */ |
|
||||||
GRPCAPI grpc_slice |
|
||||||
grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader *reader); |
|
||||||
|
|
||||||
/** Returns a RAW byte buffer instance from the output of \a reader. */ |
|
||||||
GRPCAPI grpc_byte_buffer *grpc_raw_byte_buffer_from_reader( |
|
||||||
grpc_byte_buffer_reader *reader); |
|
||||||
|
|
||||||
#ifdef __cplusplus |
|
||||||
} |
|
||||||
#endif |
|
||||||
|
|
||||||
#endif /* GRPC_IMPL_CODEGEN_BYTE_BUFFER_H */ |
|
Loading…
Reference in new issue