#ifndef GRPC_EVENT_ENGINE_SLICE_H
#define GRPC_EVENT_ENGINE_SLICE_H
#include <grpc/support/port_platform.h>
#include <string.h>
#include <cstdint>
#include <string>
#include <utility>
#include "absl/strings/string_view.h"
#include <grpc/event_engine/internal/slice_cast.h>
#include <grpc/slice.h>
#include <grpc/support/log.h>
namespace grpc_event_engine {
namespace experimental {
class Slice;
class MutableSlice;
namespace slice_detail {
static constexpr grpc_slice EmptySlice() { … }
class BaseSlice { … };
inline bool operator==(const BaseSlice& a, const BaseSlice& b) { … }
inline bool operator!=(const BaseSlice& a, const BaseSlice& b) { … }
inline bool operator==(const BaseSlice& a, absl::string_view b) { … }
inline bool operator!=(const BaseSlice& a, absl::string_view b) { … }
inline bool operator==(absl::string_view a, const BaseSlice& b) { … }
inline bool operator!=(absl::string_view a, const BaseSlice& b) { … }
inline bool operator==(const BaseSlice& a, const grpc_slice& b) { … }
inline bool operator!=(const BaseSlice& a, const grpc_slice& b) { … }
inline bool operator==(const grpc_slice& a, const BaseSlice& b) { … }
inline bool operator!=(const grpc_slice& a, const BaseSlice& b) { … }
template <typename Out>
struct CopyConstructors { … };
}
class GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND MutableSlice
: public slice_detail::BaseSlice,
public slice_detail::CopyConstructors<MutableSlice> { … };
class GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND Slice
: public slice_detail::BaseSlice,
public slice_detail::CopyConstructors<Slice> { … };
namespace internal {
template <>
struct SliceCastable<Slice, grpc_slice> { … };
template <>
struct SliceCastable<grpc_slice, Slice> { … };
template <>
struct SliceCastable<MutableSlice, grpc_slice> { … };
template <>
struct SliceCastable<grpc_slice, MutableSlice> { … };
template <>
struct SliceCastable<MutableSlice, Slice> { … };
template <>
struct SliceCastable<Slice, MutableSlice> { … };
}
}
}
#endif