#ifndef GRPC_SRC_CORE_LIB_SLICE_SLICE_H
#define GRPC_SRC_CORE_LIB_SLICE_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/event_engine/slice.h>
#include <grpc/slice.h>
#include <grpc/support/log.h>
#include "src/core/lib/gpr/string.h"
#include "src/core/lib/gprpp/debug_location.h"
#include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/slice/slice_refcount.h"
namespace grpc_core {
inline const grpc_slice& CSliceRef(const grpc_slice& slice,
DebugLocation loc = { … }
inline void CSliceUnref(const grpc_slice& slice, DebugLocation loc = { … }
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 { … };
template <typename Out>
struct StaticConstructors { … };
}
class StaticSlice : public slice_detail::BaseSlice,
public slice_detail::StaticConstructors<StaticSlice> { … };
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>,
public slice_detail::StaticConstructors<Slice> { … };
}
namespace grpc_event_engine {
namespace experimental {
namespace internal {
template <>
struct SliceCastable<grpc_core::Slice, grpc_slice> { … };
template <>
struct SliceCastable<grpc_slice, grpc_core::Slice> { … };
template <>
struct SliceCastable<grpc_core::Slice, Slice> { … };
template <>
struct SliceCastable<Slice, grpc_core::Slice> { … };
}
}
}
#endif