/[avr-libc]/avr-libc/include/string.h
ViewVC logotype

Diff of /avr-libc/include/string.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by joerg_wunsch, Sun Aug 14 21:44:54 2005 UTC revision 1.10 by aesok, Sun Oct 16 11:14:36 2005 UTC
# Line 61  extern "C" { Line 61  extern "C" {
61      \note If the strings you are working on resident in program space (flash),      \note If the strings you are working on resident in program space (flash),
62      you will need to use the string functions described in \ref avr_pgmspace. */      you will need to use the string functions described in \ref avr_pgmspace. */
63    
64    /** \ingroup avr_string
65    
66        This function find the first (least significant) bit set in the input value.
67        
68        \returns The ffs() function returns the position of the first
69        (least significant) bit set in the word val, or 0 if no bits are set.
70        The least significant bit is position 1.
71        
72        \note The ffs() (and only ffs()) is implemented as macro, that evaluates
73        a constant argument at compile time.        */
74    extern int ffs (int val) __attribute__((const));
75    
76    /* FIXME: expression, like 'ffs(ffs(ffs(...(CONSTANT)))', take very
77       large amount of memory at compile time.      */
78    #define ffs(x) ( \
79        __builtin_constant_p (x) ?  \
80            ( (x) & 1 ? 1           \
81            : (x) & 2 ? 2           \
82            : (x) & 4 ? 3           \
83            : (x) & 010 ? 4         \
84            : (x) & 020 ? 5         \
85            : (x) & 040 ? 6         \
86            : (x) & 0100 ? 7        \
87            : (x) & 0200 ? 8        \
88            : (x) & 0400 ? 9        \
89            : (x) & 01000 ? 10      \
90            : (x) & 02000 ? 11      \
91            : (x) & 04000 ? 12      \
92            : (x) & 010000 ? 13     \
93            : (x) & 020000 ? 14     \
94            : (x) & 040000 ? 15     \
95            : (x) & 0100000 ? 16    \
96            : 0 )                   \
97        : ffs(x) )
98    
99    /** \ingroup avr_string
100        Same as ffs(), for an argument of type long.        */
101    extern int ffsl (long val) __attribute__((const));
102    
103    /** \ingroup avr_string
104        Same as ffs(), for an argument of type long long.   */
105    extern int ffsll (long long val) __attribute__((const));
106    
107  extern void *memccpy(void *, const void *, int, size_t);  extern void *memccpy(void *, const void *, int, size_t);
108  extern void *memchr(const void *, int, size_t) __ATTR_PURE__;  extern void *memchr(const void *, int, size_t) __ATTR_PURE__;
109  extern int memcmp(const void *, const void *, size_t) __ATTR_PURE__;  extern int memcmp(const void *, const void *, size_t) __ATTR_PURE__;

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26