Documentation
¶
Index ¶
- Constants
- func Free(p CPtr)
- func Memcpy(dst, src CPtr, n SizeT)
- func SplitBuffer(b []byte) []string
- func SplitSparseBuffer(b []byte) []string
- type BufferGroup
- type CPtr
- type CPtrCSlice
- type CharPtr
- type CharPtrPtr
- type CommandInput
- type CommandOutput
- func (co *CommandOutput) Free()
- func (co *CommandOutput) GoValues() (buf []byte, status string)
- func (co *CommandOutput) OutBuf() CharPtrPtr
- func (co *CommandOutput) OutBufLen() SizeTPtr
- func (co *CommandOutput) Outs() CharPtrPtr
- func (co *CommandOutput) OutsLen() SizeTPtr
- func (co *CommandOutput) SetFreeFunc(f FreeFunc) *CommandOutput
- type FreeFunc
- type Iovec
- type PtrGuard
- type SizeT
- type SizeTCSlice
- type SizeTPtr
- type SyncBuffer
Constants ¶
const ( // MaxIdx is the maximum index on 32 bit systems MaxIdx = math.MaxInt32 // 2GB, max int32 value, should be safe // PtrSize is the size of a pointer PtrSize = C.sizeof_voidptr // SizeTSize is the size of C.size_t SizeTSize = C.sizeof_size_t )
Variables ¶
This section is empty.
Functions ¶
func SplitBuffer ¶
SplitBuffer splits a byte-slice buffer, typically returned from C code, into a slice of strings. The contents of the buffer are assumed to be null-byte separated. If the buffer contains a sequence of null-bytes it will assume that the "space" between the bytes are meant to be empty strings.
func SplitSparseBuffer ¶
SplitSparseBuffer splits a byte-slice buffer, typically returned from C code, into a slice of strings. The contents of the buffer are assumed to be null-byte separated. This function assumes that buffer to be "sparse" such that only non-null-byte strings will be returned, and no "empty" strings exist if null-bytes are found adjacent to each other.
Types ¶
type BufferGroup ¶
type BufferGroup struct { // C-allocated buffers. Buffers []CharPtr // Lengths of C buffers, where Lengths[i] = length(Buffers[i]). Lengths []SizeT }
BufferGroup is a helper structure that holds Go-allocated slices of C-allocated strings and their respective lengths. Useful for C functions that consume byte buffers with explicit length instead of null-terminated strings. When used as input arguments in C functions, caller must make sure the C code will not hold any pointers to either of the struct's attributes after that C function returns.
func NewBufferGroupBytes ¶
func NewBufferGroupBytes(bss [][]byte) *BufferGroup
NewBufferGroupBytes returns new BufferGroup constructed from slice of byte slices.
func NewBufferGroupStrings ¶
func NewBufferGroupStrings(strs []string) *BufferGroup
NewBufferGroupStrings returns new BufferGroup constructed from strings.
func (*BufferGroup) BuffersPtr ¶
func (s *BufferGroup) BuffersPtr() CharPtrPtr
BuffersPtr returns a pointer to the beginning of the Buffers slice.
func (*BufferGroup) LengthsPtr ¶
func (s *BufferGroup) LengthsPtr() SizeTPtr
LengthsPtr returns a pointer to the beginning of the Lengths slice.
type CPtrCSlice ¶
type CPtrCSlice []CPtr
CPtrCSlice is a C allocated slice of C pointers.
func NewCPtrCSlice ¶
func NewCPtrCSlice(size int) CPtrCSlice
NewCPtrCSlice returns a CPtrSlice. Similar to CString it must be freed with slice.Free()
type CharPtrPtr ¶
CharPtrPtr is an unsafe pointer wrapping C's `char**`.
type CommandInput ¶
type CommandInput struct {
// contains filtered or unexported fields
}
CommandInput can be used to manage the input to ceph's *_command functions.
func NewCommandInput ¶
func NewCommandInput(cmd [][]byte, inputBuffer []byte) *CommandInput
NewCommandInput creates C-level pointers from go byte buffers suitable for passing off to ceph's *_command functions.
func (*CommandInput) Cmd ¶
func (ci *CommandInput) Cmd() CharPtrPtr
Cmd returns an unsafe wrapper around an array of C-strings.
func (*CommandInput) CmdLen ¶
func (ci *CommandInput) CmdLen() SizeT
CmdLen returns the length of the array of C-strings returned by Cmd.
func (*CommandInput) Free ¶
func (ci *CommandInput) Free()
Free any C memory managed by this CommandInput.
func (*CommandInput) InBuf ¶
func (ci *CommandInput) InBuf() CharPtr
InBuf returns an unsafe wrapper to a C char*.
func (*CommandInput) InBufLen ¶
func (ci *CommandInput) InBufLen() SizeT
InBufLen returns the length of the buffer returned by InBuf.
type CommandOutput ¶
type CommandOutput struct {
// contains filtered or unexported fields
}
CommandOutput can be used to manage the outputs of ceph's *_command functions.
func NewCommandOutput ¶
func NewCommandOutput() *CommandOutput
NewCommandOutput returns an empty CommandOutput. The pointers that a CommandOutput provides can be used to get the results of ceph's *_command functions.
func (*CommandOutput) Free ¶
func (co *CommandOutput) Free()
Free any C memory tracked by this object.
func (*CommandOutput) GoValues ¶
func (co *CommandOutput) GoValues() (buf []byte, status string)
GoValues returns native go values converted from the internal C-language values tracked by this object.
func (*CommandOutput) OutBuf ¶
func (co *CommandOutput) OutBuf() CharPtrPtr
OutBuf returns an unsafe wrapper around a pointer to a `char*`.
func (*CommandOutput) OutBufLen ¶
func (co *CommandOutput) OutBufLen() SizeTPtr
OutBufLen returns an unsafe wrapper around a pointer to a size_t.
func (*CommandOutput) Outs ¶
func (co *CommandOutput) Outs() CharPtrPtr
Outs returns an unsafe wrapper around a pointer to a `char*`.
func (*CommandOutput) OutsLen ¶
func (co *CommandOutput) OutsLen() SizeTPtr
OutsLen returns an unsafe wrapper around a pointer to a size_t.
func (*CommandOutput) SetFreeFunc ¶
func (co *CommandOutput) SetFreeFunc(f FreeFunc) *CommandOutput
SetFreeFunc sets the function used to free memory held by CommandOutput. Not all uses of CommandOutput expect to use the basic C.free function and either require or prefer the use of a custom deallocation function. Use SetFreeFunc to change the free function and return the modified CommandOutput object.
type Iovec ¶
type Iovec struct {
// contains filtered or unexported fields
}
Iovec is a slice of iovec structs. Might have allocated C memory, so it must be freed with the Free() method.
func ByteSlicesToIovec ¶
ByteSlicesToIovec creates an Iovec and links it to Go buffers in data.
type PtrGuard ¶
type PtrGuard struct {
// contains filtered or unexported fields
}
PtrGuard respresents a guarded Go pointer (pointing to memory allocated by Go runtime) stored in C memory (allocated by C)
func NewPtrGuard ¶
NewPtrGuard writes the goPtr (pointing to Go memory) into C memory at the position cPtr, and returns a PtrGuard object.
type SizeTCSlice ¶
type SizeTCSlice []SizeT
SizeTCSlice is a C allocated slice of C.size_t.
func NewSizeTCSlice ¶
func NewSizeTCSlice(size int) SizeTCSlice
NewSizeTCSlice returns a SizeTCSlice. Similar to CString it must be freed with slice.Free()
type SyncBuffer ¶
type SyncBuffer struct {
// contains filtered or unexported fields
}
SyncBuffer is a C buffer connected to a data slice
func NewSyncBuffer ¶
func NewSyncBuffer(cPtr CPtr, data []byte) *SyncBuffer
NewSyncBuffer creates a C buffer from a data slice and stores it at CPtr
func (*SyncBuffer) Release ¶
func (v *SyncBuffer) Release()
Release releases the C buffer and nulls its stored pointer
func (*SyncBuffer) Sync ¶
func (*SyncBuffer) Sync()
Sync asserts that changes in the C buffer are available in the data slice