D | |
default sys_sqroot_int64 | |
diffms_timevalue | |
DIGITSBASE | |
digitsperint_decimal | |
display_FREE, display_t | |
display_window | |
display_x11screen | |
display_x11window | |
div_bigint | |
divui32_bigint | |
dlist_IMPLEMENT | |
dlist_IMPLEMENT _wlist | |
dlist_INIT, dlist_t | |
dlist_INIT_LAST, dlist_t | |
dlist_iterator_FREE, dlist_iterator_t | |
dlist_node_INIT, dlist_node_t | |
E | |
eglconfig_FREE, eglconfig_t | |
eglcontext_FREE, eglcontext_t | |
egldisplay_FREE, egldisplay_t | |
eglpbuffer_FREE, eglpbuffer_t | |
eglwindow_FREE, eglwindow_t | |
emptycache_pagecache | |
EMPTYCACHE_PAGECACHE | |
errcode_testerrortimer | |
error_maincontext | |
errorcontext_FREE, errorcontext_t | |
errorcontext_INIT_STATIC, errorcontext_t | |
EVENADDRESS | |
event_syncwait | |
exitthread_syncrun | |
expmax_decimal | |
exponent_bigint | |
exponent_decimal | |
exthash_FREE, exthash_t | |
exthash_IMPLEMENT | |
exthash_iterator_FREE, exthash_iterator_t | |
exthash_node_INIT, exthash_node_t |
Implements timevalue_t.diffms_timevalue.
#define diffms_timevalue( endtv, starttv ) ( __extension__ ({ timevalue_t * _etv = (endtv) ; timevalue_t * _stv = (starttv) ; (_etv->seconds - _stv->seconds) * 1000 + (_etv->nanosec - _stv->nanosec) / 1000000 ; }))
The base of a digit in array decimal_t.digits.
#define DIGITSBASE ( (uint32_t)1000000000 )
Implements decimal_t.digitsperint_decimal.
#define digitsperint_decimal( ) ((uint8_t)(9 * bitsperint_decimal()/32))
Static initializer.
#define display_FREE { x11display_FREE, egldisplay_FREE }
Implements window_t.display_window.
#define display_window( win ) (castfromos_display(display_x11window(os_window(win))))
Implements x11screen_t.display_x11screen.
#define display_x11screen( x11screen ) ((x11screen)->display)
Implements x11window_t.display_x11window.
#define display_x11window( x11win ) ((x11win)->display)
Implements bigint_t.div_bigint.
#define div_bigint( result, lbig, rbig ) (divmod_bigint(result, 0, lbig, rbig))
Implements bigint_t.divui32_bigint.
#define divui32_bigint( result, lbig, divisor ) (divmodui32_bigint(result, 0, lbig, divisor))
Implements dlist_t.dlist_IMPLEMENT.
#define dlist_IMPLEMENT( _fsuffix, object_t, nodeprefix ) typedef dlist_iterator_t iteratortype##_fsuffix ; typedef object_t * iteratedtype##_fsuffix ; static inline int initfirst##_fsuffix##iterator(dlist_iterator_t * iter, dlist_t * list) __attribute__ ((always_inline)) ; static inline int initlast##_fsuffix##iterator(dlist_iterator_t * iter, dlist_t * list) __attribute__ ((always_inline)) ; static inline int free##_fsuffix##iterator(dlist_iterator_t * iter) __attribute__ ((always_inline)) ; static inline bool next##_fsuffix##iterator(dlist_iterator_t * iter, object_t ** node) __attribute__ ((always_inline)) ; static inline bool prev##_fsuffix##iterator(dlist_iterator_t * iter, object_t ** node) __attribute__ ((always_inline)) ; static inline void init##_fsuffix(dlist_t * list) __attribute__ ((always_inline)) ; static inline int free##_fsuffix(dlist_t * list, struct typeadapt_t * typeadp) __attribute__ ((always_inline)) ; static inline int isempty##_fsuffix(const dlist_t * list) __attribute__ ((always_inline)) ; static inline object_t * first##_fsuffix(const dlist_t * list) __attribute__ ((always_inline)) ; static inline object_t * last##_fsuffix(const dlist_t * list) __attribute__ ((always_inline)) ; static inline object_t * next##_fsuffix(object_t * node) __attribute__ ((always_inline)) ; static inline object_t * prev##_fsuffix(object_t * node) __attribute__ ((always_inline)) ; static inline bool isinlist##_fsuffix(object_t * node) __attribute__ ((always_inline)) ; static inline void insertfirst##_fsuffix(dlist_t * list, object_t * new_node) __attribute__ ((always_inline)) ; static inline void insertlast##_fsuffix(dlist_t * list, object_t * new_node) __attribute__ ((always_inline)) ; static inline void insertafter##_fsuffix(dlist_t * list, object_t * prev_node, object_t * new_node) __attribute__ ((always_inline)) ; static inline void insertbefore##_fsuffix(object_t* next_node, object_t * new_node) __attribute__ ((always_inline)) ; static inline int removefirst##_fsuffix(dlist_t * list, object_t ** removed_node) __attribute__ ((always_inline)) ; static inline int removelast##_fsuffix(dlist_t * list, object_t ** removed_node) __attribute__ ((always_inline)) ; static inline int remove##_fsuffix(dlist_t * list, object_t * node) __attribute__ ((always_inline)) ; static inline void replacenode##_fsuffix(dlist_t * list, object_t * newnode, object_t * oldnode) __attribute__ ((always_inline)) ; static inline int removeall##_fsuffix(dlist_t * list, struct typeadapt_t * typeadp) __attribute__ ((always_inline)) ; static inline void transfer##_fsuffix(dlist_t * tolist, dlist_t * fromlist) __attribute__ ((always_inline)) ; static inline uint16_t nodeoffset##_fsuffix(void) __attribute__ ((always_inline)) ; static inline uint16_t nodeoffset##_fsuffix(void) { static_assert(UINT16_MAX > (uintptr_t) & (((object_t*)0)->nodeprefix next), "offset fits in uint16_t") ; return (uint16_t) (uintptr_t) & (((object_t*)0)->nodeprefix next) ; } static inline dlist_node_t * asnode##_fsuffix(object_t * object) { static_assert(&(((object_t*)0)->nodeprefix next) == (dlist_node_t**)((uintptr_t)nodeoffset##_fsuffix()), "correct type") ; static_assert(&(((object_t*)0)->nodeprefix prev) == (dlist_node_t**)(nodeoffset##_fsuffix() + sizeof(dlist_node_t*)), "correct type and offset") ; return (dlist_node_t *) ((uintptr_t)object + nodeoffset##_fsuffix()) ; } static inline object_t * asobject##_fsuffix(dlist_node_t * node) { return (object_t *) ((uintptr_t)node - nodeoffset##_fsuffix()) ; } static inline object_t * asobjectnull##_fsuffix(dlist_node_t * node) { return node ? (object_t *) ((uintptr_t)node - nodeoffset##_fsuffix()) : 0 ; } static inline void init##_fsuffix(dlist_t * list) { init_dlist(list) ; } static inline int free##_fsuffix(dlist_t * list, struct typeadapt_t * typeadp) { return free_dlist(list, nodeoffset##_fsuffix(), typeadp) ; } static inline int isempty##_fsuffix(const dlist_t * list) { return isempty_dlist(list) ; } static inline object_t * first##_fsuffix(const dlist_t * list) { return asobjectnull##_fsuffix(first_dlist(list)) ; } static inline object_t * last##_fsuffix(const dlist_t * list) { return asobjectnull##_fsuffix(last_dlist(list)) ; } static inline object_t * next##_fsuffix(object_t * node) { return asobject##_fsuffix(next_dlist(asnode##_fsuffix(node))) ; } static inline object_t * prev##_fsuffix(object_t * node) { return asobject##_fsuffix(prev_dlist(asnode##_fsuffix(node))) ; } static inline bool isinlist##_fsuffix(object_t * node) { return isinlist_dlist(asnode##_fsuffix(node)) ; } static inline void insertfirst##_fsuffix(dlist_t * list, object_t * new_node) { insertfirst_dlist(list, asnode##_fsuffix(new_node)) ; } static inline void insertlast##_fsuffix(dlist_t * list, object_t * new_node) { insertlast_dlist(list, asnode##_fsuffix(new_node)) ; } static inline void insertafter##_fsuffix(dlist_t * list, object_t * prev_node, object_t * new_node) { insertafter_dlist(list, asnode##_fsuffix(prev_node), asnode##_fsuffix(new_node)) ; } static inline void insertbefore##_fsuffix(object_t * next_node, object_t * new_node) { insertbefore_dlist(asnode##_fsuffix(next_node), asnode##_fsuffix(new_node)) ; } static inline int removefirst##_fsuffix(dlist_t * list, object_t ** removed_node) { int err = removefirst_dlist(list, (dlist_node_t**)removed_node) ; if (!err) *removed_node = asobject##_fsuffix(*(dlist_node_t**)removed_node) ; return err ; } static inline int removelast##_fsuffix(dlist_t * list, object_t ** removed_node) { int err = removelast_dlist(list, (dlist_node_t**)removed_node) ; if (!err) *removed_node = asobject##_fsuffix(*(dlist_node_t**)removed_node) ; return err ; } static inline int remove##_fsuffix(dlist_t * list, object_t * node) { return remove_dlist(list, asnode##_fsuffix(node)) ; } static inline void replacenode##_fsuffix(dlist_t * list, object_t * newnode, object_t * oldnode) { replacenode_dlist(list, asnode##_fsuffix(newnode), asnode##_fsuffix(oldnode)) ; } static inline int removeall##_fsuffix(dlist_t * list, struct typeadapt_t * typeadp) { return removeall_dlist(list, nodeoffset##_fsuffix(), typeadp) ; } static inline void transfer##_fsuffix(dlist_t * tolist, dlist_t * fromlist) { transfer_dlist(tolist, fromlist) ; } static inline int initfirst##_fsuffix##iterator(dlist_iterator_t * iter, dlist_t * list) { return initfirst_dlistiterator(iter, list) ; } static inline int initlast##_fsuffix##iterator(dlist_iterator_t * iter, dlist_t * list) { return initlast_dlistiterator(iter, list) ; } static inline int free##_fsuffix##iterator(dlist_iterator_t * iter) { return free_dlistiterator(iter) ; } static inline bool next##_fsuffix##iterator(dlist_iterator_t * iter, object_t ** node) { bool isNext = next_dlistiterator(iter, (dlist_node_t**)node) ; if (isNext) *node = asobject##_fsuffix(*(dlist_node_t**)node) ; return isNext ; } static inline bool prev##_fsuffix##iterator(dlist_iterator_t * iter, object_t ** node) { bool isNext = prev_dlistiterator(iter, (dlist_node_t**)node) ; if (isNext) *node = asobject##_fsuffix(*(dlist_node_t**)node) ; return isNext ; }
Generates interface of double linked list storing elements of type object_t.
void dlist_IMPLEMENT( IDNAME _fsuffix, TYPENAME object_t, IDNAME nodeprefix ) ;
Static initializer.
#define dlist_INIT { (void*)0 }
Static initializer.
#define dlist_INIT_LAST( lastnode ) { (lastnode) }
Static initializer.
#define dlist_iterator_FREE { 0, 0 }
Static initializer.
#define dlist_node_INIT { 0, 0 }
Static initializer.
#define eglconfig_FREE 0
Static initializer.
#define eglcontext_FREE 0
Static initializer.
#define egldisplay_FREE 0
Static initializer.
#define eglpbuffer_FREE 0
Static initializer.
#define eglwindow_FREE 0
Implements pagecache_t.emptycache_pagecache.
#define emptycache_pagecache( pgcache ) ((pgcache).iimpl->emptycache((pgcache).object))
Returns unused memory blocks back to OS.
#define EMPTYCACHE_PAGECACHE( ) (emptycache_pagecache(pagecache_maincontext()))
Implements test_errortimer_t.errcode_testerrortimer.
#define errcode_testerrortimer( errtimer ) ((errtimer)->errcode)
Implementation of maincontext_t.error_maincontext.
#define error_maincontext( ) (pcontext_maincontext()->error)
Static initializer.
#define errorcontext_FREE { 0, 0 }
Static initializer used in processcontext_INIT_STATIC.
#define errorcontext_INIT_STATIC { g_errorcontext_stroffset, g_errorcontext_strdata }
Test for node having an even address (bit 0 is clear).
#define EVENADDRESS( node ) ((1u & (uintptr_t)(node)) == 0)
Implements syncwait_t.event_syncwait.
#define event_syncwait( syncwait ) ((syncwait)->event)
Implements syncrun_t.exitthread_syncrun.
#define exitthread_syncrun( srun, err ) do { setstateexit_syncrun(srun) ; return err ; } while (0)
Implements decimal_t.expmax_decimal.
#define expmax_decimal( dec ) ((int32_t)INT16_MAX * digitsperint_decimal())
Implements bigint_t.exponent_bigint.
#define exponent_bigint( big ) ((big)->exponent)
Implements decimal_t.exponent_decimal.
#define exponent_decimal( dec ) ((int32_t)(dec)->exponent * digitsperint_decimal())
Static initializer.
#define exthash_FREE { 0, 0, typeadapt_member_FREE, 0, 0}
Implements exthash_t.exthash_IMPLEMENT.
#define exthash_IMPLEMENT( _fsuffix, object_t, key_t, nodename ) typedef exthash_iterator_t iteratortype##_fsuffix ; typedef object_t * iteratedtype##_fsuffix ; static inline int initfirst##_fsuffix##iterator(exthash_iterator_t * iter, exthash_t * htable) __attribute__ ((always_inline)) ; static inline int free##_fsuffix##iterator(exthash_iterator_t * iter) __attribute__ ((always_inline)) ; static inline bool next##_fsuffix##iterator(exthash_iterator_t * iter, object_t ** node) __attribute__ ((always_inline)) ; static inline int init##_fsuffix(/*out*/exthash_t * htable, size_t initial_size, size_t max_size, const typeadapt_member_t * nodeadp) __attribute__ ((always_inline)) ; static inline int free##_fsuffix(exthash_t * htable) __attribute__ ((always_inline)) ; static inline bool isempty##_fsuffix(const exthash_t * htable) __attribute__ ((always_inline)) ; static inline size_t nrelements##_fsuffix(const exthash_t * htable) __attribute__ ((always_inline)) ; static inline int find##_fsuffix(exthash_t * htable, const key_t key, /*out*/object_t ** found_node) __attribute__ ((always_inline)) ; static inline int insert##_fsuffix(exthash_t * htable, object_t * new_node) __attribute__ ((always_inline)) ; static inline int remove##_fsuffix(exthash_t * htable, object_t * node) __attribute__ ((always_inline)) ; static inline int removenodes##_fsuffix(exthash_t * htable) __attribute__ ((always_inline)) ; static inline int invariant##_fsuffix(exthash_t * htable) __attribute__ ((always_inline)) ; static inline exthash_node_t * asnode##_fsuffix(object_t * object) { static_assert(&((object_t*)0)->nodename == (exthash_node_t*)offsetof(object_t, nodename), "correct type") ; return (exthash_node_t *) ((uintptr_t)object + offsetof(object_t, nodename)) ; } static inline object_t * asobject##_fsuffix(exthash_node_t * node) { return (object_t *) ((uintptr_t)node - offsetof(object_t, nodename)) ; } static inline int init##_fsuffix(/*out*/exthash_t * htable, size_t initial_size, size_t max_size, const typeadapt_member_t * nodeadp) { return init_exthash(htable, initial_size, max_size, nodeadp) ; } static inline int free##_fsuffix(exthash_t * htable) { return free_exthash(htable) ; } static inline bool isempty##_fsuffix(const exthash_t * htable) { return isempty_exthash(htable) ; } static inline size_t nrelements##_fsuffix(const exthash_t * htable) { return nrelements_exthash(htable) ; } static inline int find##_fsuffix(exthash_t * htable, const key_t key, /*out*/object_t ** found_node) { int err = find_exthash(htable, (void*)key, (exthash_node_t**)found_node) ; if (err == 0) *found_node = asobject##_fsuffix(*(exthash_node_t**)found_node) ; return err ; } static inline int insert##_fsuffix(exthash_t * htable, object_t * new_node) { return insert_exthash(htable, asnode##_fsuffix(new_node)) ; } static inline int remove##_fsuffix(exthash_t * htable, object_t * node) { int err = remove_exthash(htable, asnode##_fsuffix(node)) ; return err ; } static inline int removenodes##_fsuffix(exthash_t * htable) { return removenodes_exthash(htable) ; } static inline int invariant##_fsuffix(exthash_t * htable) { return invariant_exthash(htable) ; } static inline int initfirst##_fsuffix##iterator(exthash_iterator_t * iter, exthash_t * htable) { return initfirst_exthashiterator(iter, htable) ; } static inline int free##_fsuffix##iterator(exthash_iterator_t * iter) { return free_exthashiterator(iter) ; } static inline bool next##_fsuffix##iterator(exthash_iterator_t * iter, object_t ** node) { bool isNext = next_exthashiterator(iter, (exthash_node_t**)node) ; if (isNext) *node = asobject##_fsuffix(*(exthash_node_t**)node) ; return isNext ; }
Adapts interface of exthash_t to nodes of type object_t.
void exthash_IMPLEMENT( IDNAME _fsuffix, TYPENAME object_t, TYPENAME key_t, IDNAME nodename ) ;
Static initializer.
#define exthash_iterator_FREE { 0, 0, 0 }
Static initializer.
#define exthash_node_INIT lrptree_node_INIT