⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 assoc.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* * assoc.c *      rtems assoc routines * *  $Id: assoc.c,v 1.7 2001/01/08 18:26:44 joel Exp $ */#if HAVE_CONFIG_H#include "config.h"#endif#include <rtems.h>#include <rtems/assoc.h>#include <string.h>             /* strcat, strcmp */#define STREQ(a,b)      (strcmp((a), (b)) == 0)#define rtems_assoc_is_default(ap)  ((ap)->name && STREQ(ap->name, RTEMS_ASSOC_DEFAULT_NAME))const rtems_assoc_t *rtems_assoc_ptr_by_name(    const rtems_assoc_t *ap,    const char *name  ){    const rtems_assoc_t *default_ap = 0;    if (rtems_assoc_is_default(ap))        default_ap = ap++;        for ( ; ap->name; ap++)        if (strcmp(ap->name, name) == 0)            return ap;    return default_ap;}const rtems_assoc_t *rtems_assoc_ptr_by_local(    const rtems_assoc_t *ap,    unsigned32     local_value  ){    const rtems_assoc_t *default_ap = 0;    if (rtems_assoc_is_default(ap))        default_ap = ap++;        for ( ; ap->name; ap++)        if (ap->local_value == local_value)            return ap;    return default_ap;}const rtems_assoc_t *rtems_assoc_ptr_by_remote(    const rtems_assoc_t *ap,    unsigned32     remote_value  ){    const rtems_assoc_t *default_ap = 0;    if (rtems_assoc_is_default(ap))        default_ap = ap++;        for ( ; ap->name; ap++)        if (ap->remote_value == remote_value)            return ap;    return default_ap;}/* * Get values */unsigned32rtems_assoc_remote_by_local(    const rtems_assoc_t *ap,    unsigned32     local_value  ){    const rtems_assoc_t *nap;    nap = rtems_assoc_ptr_by_local(ap, local_value);    if (nap)        return nap->remote_value;        return 0;}unsigned32rtems_assoc_local_by_remote(    const rtems_assoc_t *ap,    unsigned32     remote_value  ){    const rtems_assoc_t *nap;    nap = rtems_assoc_ptr_by_remote(ap, remote_value);    if (nap)        return nap->local_value;        return 0;}unsigned32rtems_assoc_remote_by_name(    const rtems_assoc_t *ap,    const char          *name  ){    const rtems_assoc_t *nap;    nap = rtems_assoc_ptr_by_name(ap, name);    if (nap)        return nap->remote_value;        return 0;}unsigned32rtems_assoc_local_by_name(    const rtems_assoc_t *ap,    const char          *name  ){    const rtems_assoc_t *nap;    nap = rtems_assoc_ptr_by_name(ap, name);    if (nap)        return nap->local_value;        return 0;}/* * what to return if a value is not found * this is not reentrant, but it really shouldn't be invoked anyway */const char *rtems_assoc_name_bad(    unsigned32 bad_value);/* body in separate file to reduce dependency on printf */const char *rtems_assoc_name_by_local(    const rtems_assoc_t *ap,    unsigned32     local_value  ){    const rtems_assoc_t *nap;    nap = rtems_assoc_ptr_by_local(ap, local_value);    if (nap)        return nap->name;        return rtems_assoc_name_bad(local_value);}const char *rtems_assoc_name_by_remote(    const rtems_assoc_t *ap,    unsigned32     remote_value  ){    const rtems_assoc_t *nap;    nap = rtems_assoc_ptr_by_remote(ap, remote_value);    if (nap)        return nap->name;        return rtems_assoc_name_bad(remote_value);}/* * Bitfield functions assume just 1 bit set in each of remote and local *      entries; they do not check for this. */unsigned32 rtems_assoc_remote_by_local_bitfield(    const rtems_assoc_t *ap,    unsigned32     local_value  ){      unsigned32 b;    unsigned32 remote_value = 0;    for (b = 1; b; b <<= 1)        if (b & local_value)            remote_value |= rtems_assoc_remote_by_local(ap, b);            return remote_value;}unsigned32 rtems_assoc_local_by_remote_bitfield(    const rtems_assoc_t *ap,    unsigned32     remote_value  ){      unsigned32 b;    unsigned32 local_value = 0;    for (b = 1; b; b <<= 1)        if (b & remote_value)            local_value |= rtems_assoc_local_by_remote(ap, b);            return local_value;}char *rtems_assoc_name_by_remote_bitfield(    const rtems_assoc_t *ap,    unsigned32     value,    char          *buffer  ){      unsigned32 b;    *buffer = 0;    for (b = 1; b; b <<= 1)        if (b & value)        {            if (*buffer)                strcat(buffer, " ");            strcat(buffer, rtems_assoc_name_by_remote(ap, b));        }            return buffer;}char *rtems_assoc_name_by_local_bitfield(    const rtems_assoc_t *ap,    unsigned32     value,    char          *buffer  ){      unsigned32 b;    *buffer = 0;    for (b = 1; b; b <<= 1)        if (b & value)        {            if (*buffer)                strcat(buffer, " ");            strcat(buffer, rtems_assoc_name_by_local(ap, b));        }            return buffer;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -