This is a handle on a key. The key might reside in scratch memory or in the buffer pool. This class provides a generic API for using such a key.
The attributes are:
Generally only the constructor is used by a CSKF callback function, and the idiom used (indeed, the only way it can be populated) is placement new as follows:
using namespace ssm_sort; w_rc_t exampleCSKF( const rid_t& rid, const object_t& obj, key_cookie_t , factory_t& f, skey_t* out ) { { // this shows how to create an skey_t from the entire header of the // incoming object_t, whether the object is in the buffer pool or // in scratch memory: smsize_t length = obj.hdr_size(); smsize_t offset = 0; bool in_hdr = true; new(out) skey_t(obj, offset, length, in_hdr); } { // this shows how to create an skey_t from the last 3 bytes of the // body of the incoming object_t, whether the // object is in the buffer pool or in scratch memory: smsize_t length = 3; smsize_t offset = obj.body_size() - length; bool in_hdr = false; new(out) skey_t(obj, offset, length, in_hdr); } { // this shows how to create an skey_t derived from the record id int val = rid.pid.page; smsize_t length = sizeof(val); smsize_t offset = 0; void *buf = f.allocfunc(length); memcpy(&buf, &val, sizeof(val)); new(out) skey_t(buf, offset, length, f); } return RCOK; }
Definition at line 502 of file sort_s.h.
Public Member Functions | |
NORET | skey_t (const object_t &o, smsize_t offset, smsize_t len, bool in_hdr) |
Construct from a key in the buffer pool. | |
NORET | skey_t (void *buf, smsize_t offset, smsize_t len, factory_t &f) |
Construct from a key in scratch memory. | |
NORET | ~skey_t () |
smsize_t | size () const |
Length of entire key. | |
bool | is_valid () const |
True if this structure is populated (points to a key). | |
bool | is_in_obj () const |
True if key is in the buffer pool. | |
bool | consistent_with_object (const object_t &o) const |
True unless this key is for an object other than o. | |
bool | is_in_hdr () const |
True if key is in buffer pool and is in record header. | |
const void * | ptr (smsize_t offset) const |
Pointer into byte at offset in key. | |
void | freespace () |
Using its factory, free space allocated for the in-scratch-memory buffer. | |
void | assert_nobuffers () const |
Asserts that no heap memory is held by this or its object_t. | |
smsize_t | contig_length () const |
Pinned amount of the key. | |
w_rc_t | copy_out (vec_t &dest) const |
Copies key into vector (which must have pre-allocated space). | |
Protected Member Functions | |
NORET | skey_t () |
void | _construct (const object_t *o, smsize_t off, smsize_t l, bool h) |
void | _construct (const void *buf, smsize_t off, smsize_t l, factory_t *f) |
Protected Attributes | |
const object_t * | _obj |
smsize_t | _offset |
NORET ssm_sort::skey_t::skey_t | ( | const object_t & | o, | |
smsize_t | offset, | |||
smsize_t | len, | |||
bool | in_hdr | |||
) | [inline] |
NORET ssm_sort::skey_t::skey_t | ( | void * | buf, | |
smsize_t | offset, | |||
smsize_t | len, | |||
factory_t & | f | |||
) | [inline] |
bool ssm_sort::skey_t::consistent_with_object | ( | const object_t & | o | ) | const [inline] |