Typeadapt

Exports typeadapter which allows containers in the data store to manage the lifetime of stored objects or to compare objects and keys.

Summary
TypeadaptExports typeadapter which allows containers in the data store to manage the lifetime of stored objects or to compare objects and keys.
CopyrightThis program is free software.
Files
C-kern/api/ds/typeadapt.hHeader file Typeadapt.
C-kern/ds/typeadapt.cImplementation file Typeadapt impl.
Types
struct typeadapt_tExport typeadapt_t into global namespace.
typeadapt_member_tExport typeadapt_member_t into global namespace.
typeadapt_object_tDeclares abstract object type.
Functions
test
unittest_ds_typeadaptTest typeadapt_t functionality.
typeadapt_member_tRelates typeadapt_nodeoffset_t with typeadapt_t.
typeadpPointer to typeadapt_t.
nodeoffStores typeadapt_nodeoffset_t.
lifetime
typeadapt_member_INITStatic initializer.
typeadapt_member_FREEStatic initializer.
query
isequal_typeadaptmemberReturns true if both typeadapt_member_ts are equal.
call-services
callnewcopy_typeadaptmemberSee callnewcopy_typeadapt.
calldelete_typeadaptmemberSee calldelete_typeadapt.
callcmpkeyobj_typeadaptmemberSee callcmpkeyobj_typeadapt.
callcmpobj_typeadaptmemberSee callcmpobj_typeadapt.
callhashobject_typeadaptmemberSee callhashobject_typeadapt.
callhashkey_typeadaptmemberSee callhashkey_typeadapt.
callgetbinarykey_typeadaptmemberSee callgetbinarykey_typeadapt.
conversion
memberasobject_typeadaptmemberSee memberasobject_typeadaptnodeoffset.
objectasmember_typeadaptmemberSee objectasmember_typeadaptnodeoffset.
typeadapt_tInterface to services needed by containers in the data store.
comparatorInterface to adapt comparison of key and object.
gethashInterface to adapt reading of a hash value.
getkeyInterface to adapt reading of a key as binary data.
lifetimeInterface to adapt the lifetime of an object type.
lifetime
typeadapt_FREEStatic initializer.
typeadapt_INIT_LIFETIMEStatic initializer.
typeadapt_INIT_CMPStatic initializer.
typeadapt_INIT_LIFECMPStatic initializer.
typeadapt_INIT_LIFEKEYStatic initializer.
typeadapt_INIT_LIFECMPKEYStatic initializer.
typeadapt_INIT_LIFECMPHASHStatic initializer.
typeadapt_INIT_LIFECMPHASHKEYStatic initializer.
query
isequal_typeadaptReturns true if both typeadapt_t are equal.
iscalldelete_typeadaptReturns true if typeadapt_lifetime_it.delete_object is not NULL.
lifetime-service
callnewcopy_typeadaptWrapper to call callnewcopy_typeadaptlifetime.
calldelete_typeadaptWrapper to call calldelete_typeadaptlifetime.
comparator-service
callcmpkeyobj_typeadaptWrapper to call callcmpkeyobj_typeadaptcomparator.
callcmpobj_typeadaptWrapper to call callcmpobj_typeadaptcomparator.
gethash-service
callhashobject_typeadaptWrapper to call callhashobject_typeadaptgethash.
callhashkey_typeadaptWrapper to call callhashkey_typeadaptgethash.
getkey-service
callgetbinarykey_typeadaptWrapper to call callgetbinarykey_typeadaptgetkey.
generic
genericcast_typeadaptCasts parameter typeadp into pointer to typeadapt_t.
typeadapt_DECLAREDeclares a derived interface from generic typeadapt_t.
typeadapt_EMBEDEmbeds the public interface part from generic typeadapt_t.
inline implementation
Macros
genericcast_typeadaptImplements typeadapt_t.genericcast_typeadapt.
callcmpkeyobj_typeadaptImplements typeadapt_t.callcmpkeyobj_typeadapt.
callcmpkeyobj_typeadaptmemberImplements typeadapt_member_t.callcmpkeyobj_typeadaptmember.
callcmpobj_typeadaptImplements typeadapt_t.callcmpobj_typeadapt.
callcmpobj_typeadaptmemberImplements typeadapt_member_t.callcmpobj_typeadaptmember.
calldelete_typeadaptImplements typeadapt_t.calldelete_typeadapt.
calldelete_typeadaptmemberImplements typeadapt_member_t.calldelete_typeadaptmember.
callgetbinarykey_typeadaptImplements typeadapt_t.callgetbinarykey_typeadapt.
callgetbinarykey_typeadaptmemberImplements typeadapt_member_t.callgetbinarykey_typeadaptmember.
callhashkey_typeadaptImplements typeadapt_t.callhashkey_typeadapt.
callhashkey_typeadaptmemberImplements typeadapt_member_t.callhashkey_typeadaptmember.
callhashobject_typeadaptImplements typeadapt_t.callhashobject_typeadapt.
callhashobject_typeadaptmemberImplements typeadapt_member_t.callhashobject_typeadaptmember.
callnewcopy_typeadaptImplements typeadapt_t.callnewcopy_typeadapt.
callnewcopy_typeadaptmemberImplements typeadapt_member_t.callnewcopy_typeadaptmember.
iscalldelete_typeadaptImplements typeadapt_t.iscalldelete_typeadapt.
memberasobject_typeadaptmemberImeplements typeadapt_member_t.memberasobject_typeadaptmember.
objectasmember_typeadaptmemberImeplements typeadapt_member_t.objectasmember_typeadaptmember.
typeadapt_EMBEDImplements typeadapt_t.typeadapt_EMBED.
typeadapt_DECLAREImplements typeadapt_t.typeadapt_DECLARE.

Copyright

This program is free software.  You can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

Author

© 2012 Jörg Seebohn

Files

C-kern/api/ds/typeadapt.h

Header file Typeadapt.

C-kern/ds/typeadapt.c

Implementation file Typeadapt impl.

Types

struct typeadapt_t

typedef struct typeadapt_t typeadapt_t

Export typeadapt_t into global namespace.

typeadapt_member_t

typedef struct typeadapt_member_t typeadapt_member_t

Export typeadapt_member_t into global namespace.

typeadapt_object_t

typedef struct typeadapt_object_t typeadapt_object_t

Declares abstract object type.  It is used to tag objects that want to be stored in the data store.

Functions

Summary

test

unittest_ds_typeadapt

int unittest_ds_typeadapt(void)

Test typeadapt_t functionality.

typeadapt_member_t

struct typeadapt_member_t

Relates typeadapt_nodeoffset_t with typeadapt_t.  With this object it is possible to call services on a pointer.  The pointer needs not point to the start address of the object but could point to any struct member.  The variable nodeoff stores the information to cast the pointer into the generic type typeadapt_object_t which is used to tag any object type.

typeadp

typeadapt_t * typeadp

Pointer to typeadapt_t.

nodeoff

typeadapt_nodeoffset_t nodeoff

Stores typeadapt_nodeoffset_t.

lifetime

typeadapt_member_INIT

#define typeadapt_member_INIT(
   typeadp,
   nodeoffset
) { typeadp, typeadapt_nodeoffset_INIT(nodeoffset) }

Static initializer.

typeadapt_member_FREE

#define typeadapt_member_FREE typeadapt_member_INIT(0,
)

Static initializer.

query

isequal_typeadaptmember

bool isequal_typeadaptmember(const typeadapt_member_t *ltypeadp,
const typeadapt_member_t *rtypeadp)

Returns true if both typeadapt_member_ts are equal.

call-services

callnewcopy_typeadaptmember

int callnewcopy_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)

See callnewcopy_typeadapt.

calldelete_typeadaptmember

int calldelete_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)

See calldelete_typeadapt.

callcmpkeyobj_typeadaptmember

int callcmpkeyobj_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)

See callcmpkeyobj_typeadapt.

callcmpobj_typeadaptmember

int callcmpobj_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)

See callcmpobj_typeadapt.

callhashobject_typeadaptmember

int callhashobject_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)

See callhashobject_typeadapt.

callhashkey_typeadaptmember

int callhashkey_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)

See callhashkey_typeadapt.

callgetbinarykey_typeadaptmember

void callgetbinarykey_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)

See callgetbinarykey_typeadapt.

conversion

memberasobject_typeadaptmember

struct typeadapt_object_t * memberasobject_typeadaptmember(
   typeadapt_member_t *nodeadp,
   void *node
)

See memberasobject_typeadaptnodeoffset.

objectasmember_typeadaptmember

void * objectasmember_typeadaptmember(typeadapt_member_t *nodeadp,
struct typeadapt_object_t *object)

See objectasmember_typeadaptnodeoffset.

typeadapt_t

struct typeadapt_t

Interface to services needed by containers in the data store.  With this interface you adapt any type to be manageable by containers in the data store.

Summary
comparatorInterface to adapt comparison of key and object.
gethashInterface to adapt reading of a hash value.
getkeyInterface to adapt reading of a key as binary data.
lifetimeInterface to adapt the lifetime of an object type.
lifetime
typeadapt_FREEStatic initializer.
typeadapt_INIT_LIFETIMEStatic initializer.
typeadapt_INIT_CMPStatic initializer.
typeadapt_INIT_LIFECMPStatic initializer.
typeadapt_INIT_LIFEKEYStatic initializer.
typeadapt_INIT_LIFECMPKEYStatic initializer.
typeadapt_INIT_LIFECMPHASHStatic initializer.
typeadapt_INIT_LIFECMPHASHKEYStatic initializer.
query
isequal_typeadaptReturns true if both typeadapt_t are equal.
iscalldelete_typeadaptReturns true if typeadapt_lifetime_it.delete_object is not NULL.
lifetime-service
callnewcopy_typeadaptWrapper to call callnewcopy_typeadaptlifetime.
calldelete_typeadaptWrapper to call calldelete_typeadaptlifetime.
comparator-service
callcmpkeyobj_typeadaptWrapper to call callcmpkeyobj_typeadaptcomparator.
callcmpobj_typeadaptWrapper to call callcmpobj_typeadaptcomparator.
gethash-service
callhashobject_typeadaptWrapper to call callhashobject_typeadaptgethash.
callhashkey_typeadaptWrapper to call callhashkey_typeadaptgethash.
getkey-service
callgetbinarykey_typeadaptWrapper to call callgetbinarykey_typeadaptgetkey.
generic
genericcast_typeadaptCasts parameter typeadp into pointer to typeadapt_t.
typeadapt_DECLAREDeclares a derived interface from generic typeadapt_t.
typeadapt_EMBEDEmbeds the public interface part from generic typeadapt_t.

comparator

typeadapt_comparator_it comparator

Interface to adapt comparison of key and object.  See typeadapt_comparator_it.

gethash

typeadapt_gethash_it gethash

Interface to adapt reading of a hash value.  See typeadapt_gethash_it.

getkey

typeadapt_getkey_it getkey

Interface to adapt reading of a key as binary data.  See typeadapt_getkey_it.

lifetime

typeadapt_lifetime_it lifetime

Interface to adapt the lifetime of an object type.  See typeadapt_lifetime_it.

lifetime

typeadapt_FREE

#define typeadapt_FREE { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_FREE }

Static initializer.

typeadapt_INIT_LIFETIME

#define typeadapt_INIT_LIFETIME(
   newcopyobj_f,
   deleteobj_f
) { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }

Static initializer.  Uses <typeadapt_lifetime_INIT> to init interface typeadapt_t.lifetime.

typeadapt_INIT_CMP

#define typeadapt_INIT_CMP(
   cmpkeyobj_f,
   cmpobj_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_FREE }

Static initializer.  Uses <typeadapt_comparator_INIT> to init interface typeadapt_t.comparator.

typeadapt_INIT_LIFECMP

#define typeadapt_INIT_LIFECMP(
   newcopyobj_f,
   deleteobj_f,
   cmpkeyobj_f,
   cmpobj_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }

Static initializer.  Initializes typeadapt_t.lifetime and typeadapt_t.comparator service interfaces.

typeadapt_INIT_LIFEKEY

#define typeadapt_INIT_LIFEKEY(
   newcopyobj_f,
   deleteobj_f,
   getbinarykey_f
) { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }

Static initializer.  Initializes typeadapt_t.lifetime and typeadapt_t.getkey service interfaces.

typeadapt_INIT_LIFECMPKEY

#define typeadapt_INIT_LIFECMPKEY(
   newcopyobj_f,
   deleteobj_f,
   cmpkeyobj_f,
   cmpobj_f,
   getbinarykey_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }

Static initializer.  Initializes typeadapt_t.lifetime, typeadapt_t.comparator, and typeadapt_t.getkey service interfaces.

typeadapt_INIT_LIFECMPHASH

#define typeadapt_INIT_LIFECMPHASH(
   newcopyobj_f,
   deleteobj_f,
   cmpkeyobj_f,
   cmpobj_f,
   hashobject_f,
   hashkey_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_INIT(hashobject_f, hashkey_f), typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }

Static initializer.  Initializes typeadapt_t.lifetime, typeadapt_t.comparator, and typeadapt_t.gethash service interfaces.

typeadapt_INIT_LIFECMPHASHKEY

#define typeadapt_INIT_LIFECMPHASHKEY(
   newcopyobj_f,
   deleteobj_f,
   cmpkeyobj_f,
   cmpobj_f,
   hashobject_f,
   hashkey_f,
   getbinarykey_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_INIT(hashobject_f, hashkey_f), typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }

Static initializer.  Initializes typeadapt_t.lifetime, typeadapt_t.comparator, typeadapt_t.gethash, and typeadapt_t.getkey service interfaces.

query

isequal_typeadapt

bool isequal_typeadapt(const typeadapt_t *ltypeadp,
const typeadapt_t *rtypeadp)

Returns true if both typeadapt_t are equal.

iscalldelete_typeadapt

bool iscalldelete_typeadapt(const typeadapt_t *typeadp)

Returns true if typeadapt_lifetime_it.delete_object is not NULL.

lifetime-service

callnewcopy_typeadapt

int callnewcopy_typeadapt(typeadapt_t *typeadp,
 ...)

Wrapper to call callnewcopy_typeadaptlifetime.

calldelete_typeadapt

int calldelete_typeadapt(typeadapt_t *typeadp,
 ...)

Wrapper to call calldelete_typeadaptlifetime.

comparator-service

callcmpkeyobj_typeadapt

int callcmpkeyobj_typeadapt(typeadapt_t *typeadp,
 ...)

Wrapper to call callcmpkeyobj_typeadaptcomparator.

callcmpobj_typeadapt

int callcmpobj_typeadapt(typeadapt_t *typeadp,
 ...)

Wrapper to call callcmpobj_typeadaptcomparator.

gethash-service

callhashobject_typeadapt

int callhashobject_typeadapt(typeadapt_t *typeadp,
 ...)

Wrapper to call callhashobject_typeadaptgethash.

callhashkey_typeadapt

int callhashkey_typeadapt(typeadapt_t *typeadp,
 ...)

Wrapper to call callhashkey_typeadaptgethash.

getkey-service

callgetbinarykey_typeadapt

int callgetbinarykey_typeadapt(typeadapt_t *typeadp,
 ...)

Wrapper to call callgetbinarykey_typeadaptgetkey.

generic

genericcast_typeadapt

typeadapt_t * genericcast_typeadapt(void *typeadp,
TYPENAME testadapter_t,
TYPENAME object_t)

Casts parameter typeadp into pointer to typeadapt_t.  The parameter typeadp has to be of type “pointer to type” that embeds the generic public interface with typeadapt_EMBED as first member.

typeadapt_DECLARE

void typeadapt_DECLARE(TYPENAME typeadapter_t,
TYPENAME object_t,
TYPENAME key_t)

Declares a derived interface from generic typeadapt_t.  It is structural compatible with typeadapt_t.  See typeadapt_t for a list of embedded services.

Parameter

typeadapter_tThe name of the structure which is declared as the interface.  The first parameter of every function is a also pointer to this type.
object_tThe object type that <typeadapter_t> supports.
key_tThe key type that typeadapt_t supports.  Must be of size sizeof(void*).

typeadapt_EMBED

void typeadapt_EMBED(TYPENAME typeadapter_t,
TYPENAME object_t,
TYPENAME key_t)

Embeds the public interface part from generic typeadapt_t.  It is structural compatible with typeadapt_t.  See typeadapt_t for a list of embedded services.

Parameter

typeadapter_tThe adapter type which implements all interface functions.  The first parameter in every function is a pointer to this type.
object_tThe object type that <typeadapter_t> supports.
key_tThe key type that typeadapt_t supports.  Must be of size sizeof(void*).

inline implementation

Summary
Macros
genericcast_typeadaptImplements typeadapt_t.genericcast_typeadapt.
callcmpkeyobj_typeadaptImplements typeadapt_t.callcmpkeyobj_typeadapt.
callcmpkeyobj_typeadaptmemberImplements typeadapt_member_t.callcmpkeyobj_typeadaptmember.
callcmpobj_typeadaptImplements typeadapt_t.callcmpobj_typeadapt.
callcmpobj_typeadaptmemberImplements typeadapt_member_t.callcmpobj_typeadaptmember.
calldelete_typeadaptImplements typeadapt_t.calldelete_typeadapt.
calldelete_typeadaptmemberImplements typeadapt_member_t.calldelete_typeadaptmember.
callgetbinarykey_typeadaptImplements typeadapt_t.callgetbinarykey_typeadapt.
callgetbinarykey_typeadaptmemberImplements typeadapt_member_t.callgetbinarykey_typeadaptmember.
callhashkey_typeadaptImplements typeadapt_t.callhashkey_typeadapt.
callhashkey_typeadaptmemberImplements typeadapt_member_t.callhashkey_typeadaptmember.
callhashobject_typeadaptImplements typeadapt_t.callhashobject_typeadapt.
callhashobject_typeadaptmemberImplements typeadapt_member_t.callhashobject_typeadaptmember.
callnewcopy_typeadaptImplements typeadapt_t.callnewcopy_typeadapt.
callnewcopy_typeadaptmemberImplements typeadapt_member_t.callnewcopy_typeadaptmember.
iscalldelete_typeadaptImplements typeadapt_t.iscalldelete_typeadapt.
memberasobject_typeadaptmemberImeplements typeadapt_member_t.memberasobject_typeadaptmember.
objectasmember_typeadaptmemberImeplements typeadapt_member_t.objectasmember_typeadaptmember.
typeadapt_EMBEDImplements typeadapt_t.typeadapt_EMBED.
typeadapt_DECLAREImplements typeadapt_t.typeadapt_DECLARE.

Macros

genericcast_typeadapt

#define genericcast_typeadapt(
   typeadp,
   typeadapter_t,
   object_t,
   key_t
) ( __extension__ ({ static_assert( offsetof(typeof(*(typeadp)), comparator) == offsetof(typeadapt_t, comparator) && offsetof(typeof(*(typeadp)), gethash) == offsetof(typeadapt_t, gethash) && offsetof(typeof(*(typeadp)), getkey) == offsetof(typeadapt_t, getkey) && offsetof(typeof(*(typeadp)), lifetime) == offsetof(typeadapt_t, lifetime), "ensure same structure") ; if (0) { (void) genericcast_typeadaptcomparator((typeof((typeadp)->comparator)*)0, typeadapter_t, object_t, key_t) ; (void) genericcast_typeadaptgethash((typeof((typeadp)->gethash)*)0, typeadapter_t, object_t, key_t) ; (void) genericcast_typeadaptgetkey((typeof((typeadp)->getkey)*)0, typeadapter_t, object_t) ; (void) genericcast_typeadaptlifetime((typeof((typeadp)->lifetime)*)0, typeadapter_t, object_t) ; } (typeadapt_t*) (typeadp) ; }))

Implements typeadapt_t.genericcast_typeadapt.

callcmpkeyobj_typeadapt

#define callcmpkeyobj_typeadapt(
   typeadp,
   ...
) callcmpkeyobj_typeadaptcomparator(&(typeadp)->comparator, typeadp, __VA_ARGS__)

Implements typeadapt_t.callcmpkeyobj_typeadapt.

callcmpkeyobj_typeadaptmember

#define callcmpkeyobj_typeadaptmember(
   nodeadp,
   ...
) callcmpkeyobj_typeadapt((nodeadp)->typeadp, __VA_ARGS__)

Implements typeadapt_member_t.callcmpkeyobj_typeadaptmember.

callcmpobj_typeadapt

#define callcmpobj_typeadapt(
   typeadp,
   ...
) callcmpobj_typeadaptcomparator(&(typeadp)->comparator, typeadp, __VA_ARGS__)

Implements typeadapt_t.callcmpobj_typeadapt.

callcmpobj_typeadaptmember

#define callcmpobj_typeadaptmember(
   nodeadp,
   ...
) callcmpobj_typeadapt((nodeadp)->typeadp, __VA_ARGS__)

Implements typeadapt_member_t.callcmpobj_typeadaptmember.

calldelete_typeadapt

#define calldelete_typeadapt(
   typeadp,
   ...
) calldelete_typeadaptlifetime(&(typeadp)->lifetime, typeadp, __VA_ARGS__)

Implements typeadapt_t.calldelete_typeadapt.

calldelete_typeadaptmember

#define calldelete_typeadaptmember(
   nodeadp,
   ...
) calldelete_typeadapt((nodeadp)->typeadp, __VA_ARGS__)

Implements typeadapt_member_t.calldelete_typeadaptmember.

callgetbinarykey_typeadapt

#define callgetbinarykey_typeadapt(
   typeadp,
   ...
) callgetbinarykey_typeadaptgetkey(&(typeadp)->getkey, typeadp, __VA_ARGS__)

Implements typeadapt_t.callgetbinarykey_typeadapt.

callgetbinarykey_typeadaptmember

#define callgetbinarykey_typeadaptmember(
   nodeadp,
   ...
) callgetbinarykey_typeadapt((nodeadp)->typeadp, __VA_ARGS__)

Implements typeadapt_member_t.callgetbinarykey_typeadaptmember.

callhashkey_typeadapt

#define callhashkey_typeadapt(
   typeadp,
   ...
) callhashkey_typeadaptgethash(&(typeadp)->gethash, typeadp, __VA_ARGS__)

Implements typeadapt_t.callhashkey_typeadapt.

callhashkey_typeadaptmember

#define callhashkey_typeadaptmember(
   nodeadp,
   ...
) callhashkey_typeadapt((nodeadp)->typeadp, __VA_ARGS__)

Implements typeadapt_member_t.callhashkey_typeadaptmember.

callhashobject_typeadapt

#define callhashobject_typeadapt(
   typeadp,
   ...
) callhashobject_typeadaptgethash(&(typeadp)->gethash, typeadp, __VA_ARGS__)

Implements typeadapt_t.callhashobject_typeadapt.

callhashobject_typeadaptmember

#define callhashobject_typeadaptmember(
   nodeadp,
   ...
) callhashobject_typeadapt((nodeadp)->typeadp, __VA_ARGS__)

Implements typeadapt_member_t.callhashobject_typeadaptmember.

callnewcopy_typeadapt

#define callnewcopy_typeadapt(
   typeadp,
   ...
) callnewcopy_typeadaptlifetime(&(typeadp)->lifetime, typeadp, __VA_ARGS__)

Implements typeadapt_t.callnewcopy_typeadapt.

callnewcopy_typeadaptmember

#define callnewcopy_typeadaptmember(
   nodeadp,
   ...
) callnewcopy_typeadapt((nodeadp)->typeadp, __VA_ARGS__)

Implements typeadapt_member_t.callnewcopy_typeadaptmember.

iscalldelete_typeadapt

#define iscalldelete_typeadapt(typeadp) (0 != (typeadp)->lifetime.delete_object)

Implements typeadapt_t.iscalldelete_typeadapt.

memberasobject_typeadaptmember

#define memberasobject_typeadaptmember(
   nodeadp,
   node
) memberasobject_typeadaptnodeoffset((nodeadp)->nodeoff, node)

Imeplements typeadapt_member_t.memberasobject_typeadaptmember.

objectasmember_typeadaptmember

#define objectasmember_typeadaptmember(
   nodeadp,
   object
) objectasmember_typeadaptnodeoffset((nodeadp)->nodeoff, object)

Imeplements typeadapt_member_t.objectasmember_typeadaptmember.

typeadapt_EMBED

#define typeadapt_EMBED(
   typeadapter_t,
   object_t,
   key_t
) struct { typeadapt_comparator_EMBED(typeadapter_t, object_t, key_t) ; } comparator ; struct { typeadapt_gethash_EMBED(typeadapter_t, object_t, key_t) ; } gethash ; struct { typeadapt_getkey_EMBED(typeadapter_t, object_t) ; } getkey ; struct { typeadapt_lifetime_EMBED(typeadapter_t, object_t) ; } lifetime

Implements typeadapt_t.typeadapt_EMBED.

typeadapt_DECLARE

#define typeadapt_DECLARE(
   typeadapter_t,
   object_t,
   key_t
) typedef struct typeadapter_t typeadapter_t ; struct typeadapter_t { typeadapt_EMBED(typeadapter_t, object_t, key_t) ; }

Implements typeadapt_t.typeadapt_DECLARE.

Exports typeadapter which allows containers in the data store to manage the lifetime of stored objects or to compare objects and keys.
Implements Typeadapt.
typedef struct typeadapt_t typeadapt_t
Export typeadapt_t into global namespace.
struct typeadapt_t
Interface to services needed by containers in the data store.
typedef struct typeadapt_member_t typeadapt_member_t
Export typeadapt_member_t into global namespace.
typedef struct typeadapt_object_t typeadapt_object_t
Declares abstract object type.
int unittest_ds_typeadapt(void)
Test typeadapt_t functionality.
typedef uint16_t typeadapt_nodeoffset_t
Describes an offset to a struct member.
typeadapt_t * typeadp
Pointer to typeadapt_t.
typeadapt_nodeoffset_t nodeoff
Stores typeadapt_nodeoffset_t.
#define typeadapt_member_INIT(
   typeadp,
   nodeoffset
) { typeadp, typeadapt_nodeoffset_INIT(nodeoffset) }
Static initializer.
#define typeadapt_member_FREE typeadapt_member_INIT(0,
)
Static initializer.
bool isequal_typeadaptmember(const typeadapt_member_t *ltypeadp,
const typeadapt_member_t *rtypeadp)
Returns true if both typeadapt_member_ts are equal.
int callnewcopy_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)
See callnewcopy_typeadapt.
#define callnewcopy_typeadapt(
   typeadp,
   ...
) callnewcopy_typeadaptlifetime(&(typeadp)->lifetime, typeadp, __VA_ARGS__)
Implements typeadapt_t.callnewcopy_typeadapt.
int calldelete_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)
See calldelete_typeadapt.
#define calldelete_typeadapt(
   typeadp,
   ...
) calldelete_typeadaptlifetime(&(typeadp)->lifetime, typeadp, __VA_ARGS__)
Implements typeadapt_t.calldelete_typeadapt.
int callcmpkeyobj_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)
See callcmpkeyobj_typeadapt.
#define callcmpkeyobj_typeadapt(
   typeadp,
   ...
) callcmpkeyobj_typeadaptcomparator(&(typeadp)->comparator, typeadp, __VA_ARGS__)
Implements typeadapt_t.callcmpkeyobj_typeadapt.
int callcmpobj_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)
See callcmpobj_typeadapt.
#define callcmpobj_typeadapt(
   typeadp,
   ...
) callcmpobj_typeadaptcomparator(&(typeadp)->comparator, typeadp, __VA_ARGS__)
Implements typeadapt_t.callcmpobj_typeadapt.
int callhashobject_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)
See callhashobject_typeadapt.
#define callhashobject_typeadapt(
   typeadp,
   ...
) callhashobject_typeadaptgethash(&(typeadp)->gethash, typeadp, __VA_ARGS__)
Implements typeadapt_t.callhashobject_typeadapt.
int callhashkey_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)
See callhashkey_typeadapt.
#define callhashkey_typeadapt(
   typeadp,
   ...
) callhashkey_typeadaptgethash(&(typeadp)->gethash, typeadp, __VA_ARGS__)
Implements typeadapt_t.callhashkey_typeadapt.
void callgetbinarykey_typeadaptmember(typeadapt_member_t *nodeadp,
 ...)
See callgetbinarykey_typeadapt.
#define callgetbinarykey_typeadapt(
   typeadp,
   ...
) callgetbinarykey_typeadaptgetkey(&(typeadp)->getkey, typeadp, __VA_ARGS__)
Implements typeadapt_t.callgetbinarykey_typeadapt.
struct typeadapt_object_t * memberasobject_typeadaptmember(
   typeadapt_member_t *nodeadp,
   void *node
)
See memberasobject_typeadaptnodeoffset.
#define memberasobject_typeadaptnodeoffset(
   nodeoff,
   node
) ( __extension__ ({ uint32_t _off = (nodeoff); (struct typeadapt_object_t*) ( (uintptr_t)(node) - _off ); }))
Implements typeadapt_nodeoffset_t.memberasobject_typeadaptnodeoffset.
void * objectasmember_typeadaptmember(typeadapt_member_t *nodeadp,
struct typeadapt_object_t *object)
See objectasmember_typeadaptnodeoffset.
#define objectasmember_typeadaptnodeoffset(
   nodeoff,
   object
) ( __extension__ ({ uint32_t _off = (nodeoff); (void*) ((uintptr_t)(object) + _off); }))
Implements typeadapt_nodeoffset_t.objectasmember_typeadaptnodeoffset.
typeadapt_comparator_it comparator
Interface to adapt comparison of key and object.
typeadapt_gethash_it gethash
Interface to adapt reading of a hash value.
typeadapt_getkey_it getkey
Interface to adapt reading of a key as binary data.
typeadapt_lifetime_it lifetime
Interface to adapt the lifetime of an object type.
#define typeadapt_FREE { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_FREE }
Static initializer.
#define typeadapt_INIT_LIFETIME(
   newcopyobj_f,
   deleteobj_f
) { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_CMP(
   cmpkeyobj_f,
   cmpobj_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_FREE }
Static initializer.
#define typeadapt_INIT_LIFECMP(
   newcopyobj_f,
   deleteobj_f,
   cmpkeyobj_f,
   cmpobj_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFEKEY(
   newcopyobj_f,
   deleteobj_f,
   getbinarykey_f
) { typeadapt_comparator_FREE, typeadapt_gethash_FREE, typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFECMPKEY(
   newcopyobj_f,
   deleteobj_f,
   cmpkeyobj_f,
   cmpobj_f,
   getbinarykey_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_FREE, typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFECMPHASH(
   newcopyobj_f,
   deleteobj_f,
   cmpkeyobj_f,
   cmpobj_f,
   hashobject_f,
   hashkey_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_INIT(hashobject_f, hashkey_f), typeadapt_getkey_FREE, typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
#define typeadapt_INIT_LIFECMPHASHKEY(
   newcopyobj_f,
   deleteobj_f,
   cmpkeyobj_f,
   cmpobj_f,
   hashobject_f,
   hashkey_f,
   getbinarykey_f
) { typeadapt_comparator_INIT(cmpkeyobj_f, cmpobj_f), typeadapt_gethash_INIT(hashobject_f, hashkey_f), typeadapt_getkey_INIT(getbinarykey_f), typeadapt_lifetime_INIT(newcopyobj_f, deleteobj_f) }
Static initializer.
bool isequal_typeadapt(const typeadapt_t *ltypeadp,
const typeadapt_t *rtypeadp)
Returns true if both typeadapt_t are equal.
bool iscalldelete_typeadapt(const typeadapt_t *typeadp)
Returns true if typeadapt_lifetime_it.delete_object is not NULL.
int (
   *delete_object
) (struct typeadapt_t * typeadp, struct typeadapt_object_t ** object)
Function frees memory and associated resources of object.
int callnewcopy_typeadapt(typeadapt_t *typeadp,
 ...)
Wrapper to call callnewcopy_typeadaptlifetime.
#define callnewcopy_typeadaptlifetime(
   adplife,
   typeadp,
   destobject,
   srcobject
) ((adplife)->newcopy_object((typeadp), (destobject), (srcobject)))
Implements typeadapt_lifetime_it.callnewcopy_typeadaptlifetime.
int calldelete_typeadapt(typeadapt_t *typeadp,
 ...)
Wrapper to call calldelete_typeadaptlifetime.
#define calldelete_typeadaptlifetime(
   adplife,
   typeadp,
   object
) ((adplife)->delete_object((typeadp), (object)))
Implements typeadapt_lifetime_it.calldelete_typeadaptlifetime.
int callcmpkeyobj_typeadapt(typeadapt_t *typeadp,
 ...)
Wrapper to call callcmpkeyobj_typeadaptcomparator.
Implements typeadapt_comparator_it.callcmpkeyobj_typeadaptcomparator.
int callcmpobj_typeadapt(typeadapt_t *typeadp,
 ...)
Wrapper to call callcmpobj_typeadaptcomparator.
Implements typeadapt_comparator_it.callcmpobj_typeadaptcomparator.
int callhashobject_typeadapt(typeadapt_t *typeadp,
 ...)
Wrapper to call callhashobject_typeadaptgethash.
#define callhashobject_typeadaptgethash(
   gethash,
   typeadp,
   node
) ((gethash)->hashobject((typeadp), (node)))
Implements typeadapt_gethash_it.callhashobject_typeadaptgethash.
int callhashkey_typeadapt(typeadapt_t *typeadp,
 ...)
Wrapper to call callhashkey_typeadaptgethash.
#define callhashkey_typeadaptgethash(
   gethash,
   typeadp,
   key
) ((gethash)->hashkey((typeadp), (key)))
Implements typeadapt_gethash_it.callhashkey_typeadaptgethash.
int callgetbinarykey_typeadapt(typeadapt_t *typeadp,
 ...)
Wrapper to call callgetbinarykey_typeadaptgetkey.
Implements typeadapt_getkey_it.callgetbinarykey_typeadaptgetkey.
typeadapt_t * genericcast_typeadapt(void *typeadp,
TYPENAME testadapter_t,
TYPENAME object_t)
Casts parameter typeadp into pointer to typeadapt_t.
void typeadapt_DECLARE(TYPENAME typeadapter_t,
TYPENAME object_t,
TYPENAME key_t)
Declares a derived interface from generic typeadapt_t.
void typeadapt_EMBED(TYPENAME typeadapter_t,
TYPENAME object_t,
TYPENAME key_t)
Embeds the public interface part from generic typeadapt_t.
#define genericcast_typeadapt(
   typeadp,
   typeadapter_t,
   object_t,
   key_t
) ( __extension__ ({ static_assert( offsetof(typeof(*(typeadp)), comparator) == offsetof(typeadapt_t, comparator) && offsetof(typeof(*(typeadp)), gethash) == offsetof(typeadapt_t, gethash) && offsetof(typeof(*(typeadp)), getkey) == offsetof(typeadapt_t, getkey) && offsetof(typeof(*(typeadp)), lifetime) == offsetof(typeadapt_t, lifetime), "ensure same structure") ; if (0) { (void) genericcast_typeadaptcomparator((typeof((typeadp)->comparator)*)0, typeadapter_t, object_t, key_t) ; (void) genericcast_typeadaptgethash((typeof((typeadp)->gethash)*)0, typeadapter_t, object_t, key_t) ; (void) genericcast_typeadaptgetkey((typeof((typeadp)->getkey)*)0, typeadapter_t, object_t) ; (void) genericcast_typeadaptlifetime((typeof((typeadp)->lifetime)*)0, typeadapter_t, object_t) ; } (typeadapt_t*) (typeadp) ; }))
Implements typeadapt_t.genericcast_typeadapt.
#define callcmpkeyobj_typeadaptmember(
   nodeadp,
   ...
) callcmpkeyobj_typeadapt((nodeadp)->typeadp, __VA_ARGS__)
Implements typeadapt_member_t.callcmpkeyobj_typeadaptmember.
#define callcmpobj_typeadaptmember(
   nodeadp,
   ...
) callcmpobj_typeadapt((nodeadp)->typeadp, __VA_ARGS__)
Implements typeadapt_member_t.callcmpobj_typeadaptmember.
#define calldelete_typeadaptmember(
   nodeadp,
   ...
) calldelete_typeadapt((nodeadp)->typeadp, __VA_ARGS__)
Implements typeadapt_member_t.calldelete_typeadaptmember.
#define callgetbinarykey_typeadaptmember(
   nodeadp,
   ...
) callgetbinarykey_typeadapt((nodeadp)->typeadp, __VA_ARGS__)
Implements typeadapt_member_t.callgetbinarykey_typeadaptmember.
#define callhashkey_typeadaptmember(
   nodeadp,
   ...
) callhashkey_typeadapt((nodeadp)->typeadp, __VA_ARGS__)
Implements typeadapt_member_t.callhashkey_typeadaptmember.
#define callhashobject_typeadaptmember(
   nodeadp,
   ...
) callhashobject_typeadapt((nodeadp)->typeadp, __VA_ARGS__)
Implements typeadapt_member_t.callhashobject_typeadaptmember.
#define callnewcopy_typeadaptmember(
   nodeadp,
   ...
) callnewcopy_typeadapt((nodeadp)->typeadp, __VA_ARGS__)
Implements typeadapt_member_t.callnewcopy_typeadaptmember.
#define iscalldelete_typeadapt(typeadp) (0 != (typeadp)->lifetime.delete_object)
Implements typeadapt_t.iscalldelete_typeadapt.
#define memberasobject_typeadaptmember(
   nodeadp,
   node
) memberasobject_typeadaptnodeoffset((nodeadp)->nodeoff, node)
Imeplements typeadapt_member_t.memberasobject_typeadaptmember.
#define objectasmember_typeadaptmember(
   nodeadp,
   object
) objectasmember_typeadaptnodeoffset((nodeadp)->nodeoff, object)
Imeplements typeadapt_member_t.objectasmember_typeadaptmember.
#define typeadapt_EMBED(
   typeadapter_t,
   object_t,
   key_t
) struct { typeadapt_comparator_EMBED(typeadapter_t, object_t, key_t) ; } comparator ; struct { typeadapt_gethash_EMBED(typeadapter_t, object_t, key_t) ; } gethash ; struct { typeadapt_getkey_EMBED(typeadapter_t, object_t) ; } getkey ; struct { typeadapt_lifetime_EMBED(typeadapter_t, object_t) ; } lifetime
Implements typeadapt_t.typeadapt_EMBED.
#define typeadapt_DECLARE(
   typeadapter_t,
   object_t,
   key_t
) typedef struct typeadapter_t typeadapter_t ; struct typeadapter_t { typeadapt_EMBED(typeadapter_t, object_t, key_t) ; }
Implements typeadapt_t.typeadapt_DECLARE.
struct typeadapt_lifetime_it
Declares interface (function table) for managing the lifetime of objects.
Close