FastLED 3.9.15
Loading...
Searching...
No Matches
cstring.h
Go to the documentation of this file.
1#pragma once
2
4// FastLED C String Functions (cstring.h equivalents)
5//
6// Provides wrappers for standard C string functions (memcpy, strlen, strcmp, etc.)
7// while avoiding the slow <cstring> include that impacts compilation time.
8//
9// All functions are in the fl:: namespace for type safety and clarity.
10// Implementations are in cstring.cpp
12
13#include "fl/stl/stdint.h"
14#include "fl/stl/noexcept.h"
15
16namespace fl {
17
18// ============================================================================
19// Standard String Functions
20// ============================================================================
21
22// fl::strlen - wrapper for strlen
23size_t strlen(const char* s) FL_NOEXCEPT;
24
25// fl::strcmp - wrapper for strcmp
26int strcmp(const char* s1, const char* s2) FL_NOEXCEPT;
27
28// fl::strncmp - wrapper for strncmp
29int strncmp(const char* s1, const char* s2, size_t n) FL_NOEXCEPT;
30
31// fl::strcpy - wrapper for strcpy (use with caution - prefer strncpy)
32char* strcpy(char* dest, const char* src) FL_NOEXCEPT;
33
34// fl::strncpy - wrapper for strncpy
35char* strncpy(char* dest, const char* src, size_t n) FL_NOEXCEPT;
36
37// fl::strcat - wrapper for strcat (use with caution - prefer strncat)
38char* strcat(char* dest, const char* src) FL_NOEXCEPT;
39
40// fl::strncat - wrapper for strncat
41char* strncat(char* dest, const char* src, size_t n) FL_NOEXCEPT;
42
43// fl::strstr - wrapper for strstr
44const char* strstr(const char* haystack, const char* needle) FL_NOEXCEPT;
45
46// fl::strchr - wrapper for strchr (find first occurrence of character)
47char* strchr(char* s, int c) FL_NOEXCEPT;
48
49// fl::strchr - const version wrapper for strchr
50const char* strchr(const char* s, int c) FL_NOEXCEPT;
51
52// fl::strrchr - wrapper for strrchr (find last occurrence of character)
53char* strrchr(char* s, int c) FL_NOEXCEPT;
54
55// fl::strrchr - const version wrapper for strrchr
56const char* strrchr(const char* s, int c) FL_NOEXCEPT;
57
58// fl::strspn - wrapper for strspn (length of initial segment matching characters)
59size_t strspn(const char* s1, const char* s2) FL_NOEXCEPT;
60
61// fl::strcspn - wrapper for strcspn (length of initial segment not matching characters)
62size_t strcspn(const char* s1, const char* s2) FL_NOEXCEPT;
63
64// fl::strpbrk - wrapper for strpbrk (find first occurrence of any character from set)
65char* strpbrk(char* s1, const char* s2) FL_NOEXCEPT;
66
67// fl::strpbrk - const version wrapper for strpbrk
68const char* strpbrk(const char* s1, const char* s2) FL_NOEXCEPT;
69
70// fl::strtok - wrapper for strtok (tokenize string, note: not thread-safe)
71char* strtok(char* s1, const char* s2) FL_NOEXCEPT;
72
73// fl::strerror - wrapper for strerror (convert error number to string)
74char* strerror(int errnum) FL_NOEXCEPT;
75
76// ============================================================================
77// Memory Functions
78// ============================================================================
79
80// fl::memcpy - wrapper for memcpy
81void* memcpy(void* dest, const void* src, size_t n) FL_NOEXCEPT;
82
83// fl::memcmp - wrapper for memcmp
84int memcmp(const void* s1, const void* s2, size_t n) FL_NOEXCEPT;
85
86// fl::memmove - wrapper for memmove (handles overlapping memory)
87void* memmove(void* dest, const void* src, size_t n) FL_NOEXCEPT;
88
89// fl::memset - wrapper for memset
90void* memset(void* s, int c, size_t n) FL_NOEXCEPT;
91
92// fl::memchr - wrapper for memchr
93void* memchr(void* s, int c, size_t n) FL_NOEXCEPT;
94
95// fl::memchr - const version wrapper for memchr
96const void* memchr(const void* s, int c, size_t n) FL_NOEXCEPT;
97
98// ============================================================================
99// Legacy compatibility functions (aliases)
100// ============================================================================
101
102// fl::memcopy - legacy name for memcpy
103inline void* memcopy(void* dest, const void* src, size_t n) FL_NOEXCEPT {
104 return memcpy(dest, src, n);
105}
106
107// ============================================================================
108// Arduino PROGMEM String Functions (platform-specific _P variants)
109// ============================================================================
110// These are used when strings are stored in program memory on embedded platforms
111
112// Forward declarations for pgm_p type (defined in json.hpp)
113namespace detail {
114 typedef const void* pgm_p;
115}
116
117// Only declare PROGMEM functions on platforms that support them
118#if defined(ARDUINO) && defined(FL_IS_AVR)
119
120// fl::strlen_P - strlen for PROGMEM strings
121size_t strlen_P(detail::pgm_p s) FL_NOEXCEPT;
122
123// fl::strcmp_P - strcmp with PROGMEM string
124int strcmp_P(const char* a, detail::pgm_p b) FL_NOEXCEPT;
125
126// fl::memcmp_P - memcmp with PROGMEM memory
127int memcmp_P(const void* a, detail::pgm_p b, size_t n) FL_NOEXCEPT;
128
129// fl::memcpy_P - memcpy from PROGMEM
130void* memcpy_P(void* dest, detail::pgm_p src, size_t n) FL_NOEXCEPT;
131
132#endif // defined(ARDUINO) && defined(__AVR__)
133
134} // namespace fl
const void * pgm_p
Definition cstring.h:114
void * memcpy(void *dest, const void *src, size_t n) FL_NOEXCEPT
int strncmp(const char *s1, const char *s2, size_t n) FL_NOEXCEPT
char * strtok(char *s1, const char *s2) FL_NOEXCEPT
size_t strlen(const char *s) FL_NOEXCEPT
char * strerror(int errnum) FL_NOEXCEPT
void * memcopy(void *dest, const void *src, size_t n) FL_NOEXCEPT
Definition cstring.h:103
void * memset(void *s, int c, size_t n) FL_NOEXCEPT
char * strpbrk(char *s1, const char *s2) FL_NOEXCEPT
int memcmp(const void *s1, const void *s2, size_t n) FL_NOEXCEPT
size_t strspn(const char *s1, const char *s2) FL_NOEXCEPT
char * strchr(char *s, int c) FL_NOEXCEPT
char * strrchr(char *s, int c) FL_NOEXCEPT
const char * strstr(const char *haystack, const char *needle) FL_NOEXCEPT
void * memmove(void *dest, const void *src, size_t n) FL_NOEXCEPT
char * strncat(char *dest, const char *src, size_t n) FL_NOEXCEPT
char * strcpy(char *dest, const char *src) FL_NOEXCEPT
size_t strcspn(const char *s1, const char *s2) FL_NOEXCEPT
void * memchr(void *s, int c, size_t n) FL_NOEXCEPT
int strcmp(const char *s1, const char *s2) FL_NOEXCEPT
char * strncpy(char *dest, const char *src, size_t n) FL_NOEXCEPT
char * strcat(char *dest, const char *src) FL_NOEXCEPT
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT