Provided by: libpmemobj-dev_1.13.1-1.1ubuntu2_amd64 bug

NAME

       POBJ_LAYOUT_BEGIN(),   POBJ_LAYOUT_TOID(),   POBJ_LAYOUT_ROOT(),  POBJ_LAYOUT_NAME(),  POBJ_LAYOUT_END(),
       POBJ_LAYOUT_TYPES_NUM() - persistent memory transactional object store layout

SYNOPSIS

              #include <libpmemobj.h>

              POBJ_LAYOUT_BEGIN(layout)
              POBJ_LAYOUT_TOID(layout, TYPE)
              POBJ_LAYOUT_ROOT(layout, ROOT_TYPE)
              POBJ_LAYOUT_NAME(layout)
              POBJ_LAYOUT_END(layout)
              POBJ_LAYOUT_TYPES_NUM(layout)

DESCRIPTION

       libpmemobj(7) defines a set of macros  for  convenient  declaration  of  a  pool’s  layout.   The  layout
       declaration  consists  of  declarations  of  a number of used types.  The declared types will be assigned
       consecutive type numbers.  Declared types may be  used  in  conjunction  with  type  safety  macros  (see
       TOID_DECLARE(3)).   Once  created,  the  layout  declaration must not be changed unless any new types are
       added at the end of the existing layout declaration.  Modifying any  existing  declaration  may  lead  to
       changes in the type numbers of declared types, which in consequence may cause data corruption.

       The  POBJ_LAYOUT_BEGIN() macro indicates a begin of declaration of layout.  The LAYOUT argument is a name
       of layout.  This argument must be passed to all macros related to the declaration of layout.

       The POBJ_LAYOUT_TOID() macro declares a typed OID for type passed as TYPE argument inside the declaration
       of  layout.   All types declared using this macro are assigned with consecutive type numbers.  This macro
       must be used between the POBJ_LAYOUT_BEGIN() and POBJ_LAYOUT_END() macros, with the same name  passed  as
       LAYOUT argument.

       The  POBJ_LAYOUT_ROOT()  macro  declares  a  typed  OID  for type passed as ROOT_TYPE argument inside the
       declaration  of  layout.   The  typed  OID  will  be  assigned  with  type   number   for   root   object
       POBJ_ROOT_TYPE_NUM.

       The POBJ_LAYOUT_END() macro ends the declaration of layout.

       The POBJ_LAYOUT_NAME() macro returns the name of layout as a null-terminated string.

       The  POBJ_LAYOUT_TYPES_NUM()  macro  returns  number of types declared using the POBJ_LAYOUT_TOID() macro
       within the layout declaration.

EXAMPLE

       This is an example of layout declaration:

              POBJ_LAYOUT_BEGIN(mylayout);
              POBJ_LAYOUT_ROOT(mylayout, struct root);
              POBJ_LAYOUT_TOID(mylayout, struct node);
              POBJ_LAYOUT_TOID(mylayout, struct foo);
              POBJ_LAYOUT_END(mylayout);

              struct root
              {
                  TOID(struct node) node;
              };

              struct node
              {
                  TOID(struct node) next;
                  TOID(struct foo) foo;
              };

       The name of layout and the number of declared types can be retrieved using the following code:

              const char *layout_name = POBJ_LAYOUT_NAME(mylayout);
              int num_of_types = POBJ_LAYOUT_TYPES_NUM(mylayout);

SEE ALSO

       TOID_DECLARE(3), libpmemobj(7) and <https://pmem.io>