Provided by: libpmemobj-dev_1.4.1-0ubuntu1~18.04.1_amd64 bug

NAME

       OID_IS_NULL(),    OID_EQUALS(),   pmemobj_direct(),   pmemobj_oid(),   pmemobj_type_num(),
       pmemobj_pool_by_oid(), pmemobj_pool_by_ptr() - functions  that  allow  mapping  operations
       between object addresses, object handles, oids or type numbers

SYNOPSIS

              #include <libpmemobj.h>

              OID_IS_NULL(PMEMoid oid)
              OID_EQUALS(PMEMoid lhs, PMEMoid rhs)

              void *pmemobj_direct(PMEMoid oid);
              PMEMoid pmemobj_oid(const void *addr);
              uint64_t pmemobj_type_num(PMEMoid oid);
              PMEMobjpool *pmemobj_pool_by_oid(PMEMoid oid);
              PMEMobjpool *pmemobj_pool_by_ptr(const void *addr);

DESCRIPTION

       Each  object stored in a persistent memory pool is represented by an object handle of type
       PMEMoid.  In practice, such a handle is a unique Object IDentifier (OID) of global  scope,
       which  means  that  two  objects  from  different pools will never have the same OID.  The
       special OID_NULL macro defines a NULL-like handle that does not represent any object.  The
       size  of  a single object is limited by PMEMOBJ_MAX_ALLOC_SIZE.  Thus an allocation with a
       requested size greater than this value will fail.

       An OID cannot be used as a direct pointer to an object.  Each time the program attempts to
       read  or  write  object  data,  it must obtain the current memory address of the object by
       converting its OID into a pointer.

       In contrast to the memory address, the OID value for given object does not  change  during
       the  life of an object (except for realloc), and remains valid after closing and reopening
       the pool.  For this reason, if an  object  contains  a  reference  to  another  persistent
       object,  for example, to build some kind of a linked data structure, the reference must be
       an OID and not a memory address.

       pmemobj_direct() returns a pointer to the PMEMoid object with handle oid.

       pmemobj_oid() returns a PMEMoid handle to the object pointed to by addr.

       pmemobj_type_num() returns the type number of the PMEMoid object with handle oid.

       pmemobj_pool_by_oid() returns a PMEMobjpool* handle to the  pool  containing  the  PMEMoid
       object with handle oid.

       pmemobj_pool_by_ptr()  returns  a  PMEMobjpool*  handle to the pool containing the address
       addr.

       At the time of allocation  (or  reallocation),  each  object  may  be  assigned  a  number
       representing  its  type.  Such a type number may be used to arrange the persistent objects
       based on their actual user-defined structure type, thus facilitating implementation  of  a
       simple run-time type safety mechanism.  This also allows iterating through all the objects
       of a given type that are stored in the persistent memory pool.  See  pmemobj_first(3)  for
       more information.

       The OID_IS_NULL() macro checks if PMEMoid represents a NULL object.

       The OID_EQUALS() macro compares two PMEMoid objects.

RETURN VALUE

       The  pmemobj_direct() function returns a pointer to the object represented by oid.  If oid
       is OID_NULL, pmemobj_direct() returns NULL.

       The pmemobj_oid() function returns a PMEMoid handle to the object pointed to by addr.   If
       addr is not from within a pmemobj pool, OID_NULL is returned.  If addr is not the start of
       an object (does not point to the beginning of a valid allocation), the  resulting  PMEMoid
       can be safely used only with:

       • pmemobj_pool_by_oid()

       • pmemobj_direct()

       • pmemobj_tx_add_range(3)

       The pmemobj_type_num() function returns the type number of the object represented by oid.

       The  pmemobj_pool_by_oid()  function returns a handle to the pool that contains the object
       represented by oid.  If the the pool is not open or oid is OID_NULL, pmemobj_pool_by_oid()
       returns NULL.

       The pmemobj_pool_by_ptr() function returns a handle to the pool that contains the address,
       or NULL if the address does not belong to any open pool.

NOTES

       For performance reasons, on Linux and FreeBSD the pmemobj_direct() function is inlined  by
       default.     To    use    the    non-inlined    variant    of   pmemobj_direct(),   define
       PMEMOBJ_DIRECT_NON_INLINE prior to the #include of <libpmemobj.h>, either with #define  or
       with the -D option to the compiler.

SEE ALSO

       libpmemobj(7) and <http://pmem.io>