// GetApproximateSizes returns the approximate number of bytes of file system // space used by one or more key ranges. // // The keys counted will begin at Range.Start and end on the key before // Range.Limit. func (db *DB) GetApproximateSizes(ranges []Range) []uint64 { sizes := make([]uint64, len(ranges)) if len(ranges) == 0 { return sizes } cStarts := make([]*C.char, len(ranges)) cLimits := make([]*C.char, len(ranges)) cStartLens := make([]C.size_t, len(ranges)) cLimitLens := make([]C.size_t, len(ranges)) for i, r := range ranges { cStarts[i] = byteToChar(r.Start) cStartLens[i] = C.size_t(len(r.Start)) cLimits[i] = byteToChar(r.Limit) cLimitLens[i] = C.size_t(len(r.Limit)) } C.rocksdb_approximate_sizes( db.c, C.int(len(ranges)), &cStarts[0], &cStartLens[0], &cLimits[0], &cLimitLens[0], (*C.uint64_t)(&sizes[0])) return sizes }
// GetApproximateSizes returns the approximate number of bytes of file system // space used by one or more key ranges. // // The keys counted will begin at Range.Start and end on the key before // Range.Limit. func (db *DB) GetApproximateSizes(ranges []Range) []uint64 { starts := make([]*C.char, len(ranges)) limits := make([]*C.char, len(ranges)) startLens := make([]C.size_t, len(ranges)) limitLens := make([]C.size_t, len(ranges)) for i, r := range ranges { starts[i] = C.CString(string(r.Start)) startLens[i] = C.size_t(len(r.Start)) limits[i] = C.CString(string(r.Limit)) limitLens[i] = C.size_t(len(r.Limit)) } sizes := make([]uint64, len(ranges)) numranges := C.int(len(ranges)) startsPtr := &starts[0] limitsPtr := &limits[0] startLensPtr := &startLens[0] limitLensPtr := &limitLens[0] sizesPtr := (*C.uint64_t)(&sizes[0]) C.rocksdb_approximate_sizes( db.Ldb, numranges, startsPtr, startLensPtr, limitsPtr, limitLensPtr, sizesPtr) for i := range ranges { C.free(unsafe.Pointer(starts[i])) C.free(unsafe.Pointer(limits[i])) } return sizes }