FastLED 3.9.15
Loading...
Searching...
No Matches
cstring.cpp.hpp
Go to the documentation of this file.
1
2// FastLED C String Functions (cstring.cpp)
3//
4// Implementations of fl:: string and memory functions wrapping C library calls.
5// This separation from the header reduces compilation overhead while maintaining
6// a clean API in the fl:: namespace.
8
9#include "fl/stl/cstring.h"
10#include "fl/stl/bit_cast.h"
11#include "platforms/is_platform.h"
12// Include C string headers for standard C library functions
13// IWYU pragma: begin_keep
14#include <string.h> // okay banned header (STL wrapper implementation requires standard header)
15#include <stdlib.h> // okay banned header (STL wrapper implementation requires standard header)
16
17// IWYU pragma: end_keep
18// Include Arduino PROGMEM headers if on AVR
19#if defined(ARDUINO) && defined(FL_IS_AVR)
20// IWYU pragma: begin_keep
21#include <avr/pgmspace.h>
22#include "fl/stl/noexcept.h"
23// IWYU pragma: end_keep
24#endif
25
26// C library string functions are available through the global namespace
27
28namespace fl {
29
30// ============================================================================
31// Standard String Functions
32// ============================================================================
33
34size_t strlen(const char* s) FL_NOEXCEPT {
35 return ::strlen(s);
36}
37
38int strcmp(const char* s1, const char* s2) FL_NOEXCEPT {
39 return ::strcmp(s1, s2);
40}
41
42int strncmp(const char* s1, const char* s2, size_t n) FL_NOEXCEPT {
43 return ::strncmp(s1, s2, n);
44}
45
46char* strcpy(char* dest, const char* src) FL_NOEXCEPT {
47 return ::strcpy(dest, src);
48}
49
50char* strncpy(char* dest, const char* src, size_t n) FL_NOEXCEPT {
51 return ::strncpy(dest, src, n);
52}
53
54char* strcat(char* dest, const char* src) FL_NOEXCEPT {
55 return ::strcat(dest, src);
56}
57
58char* strncat(char* dest, const char* src, size_t n) FL_NOEXCEPT {
59 return ::strncat(dest, src, n);
60}
61
62const char* strstr(const char* haystack, const char* needle) FL_NOEXCEPT {
63 return ::strstr(haystack, needle);
64}
65
66char* strchr(char* s, int c) FL_NOEXCEPT {
67 return ::strchr(s, c);
68}
69
70const char* strchr(const char* s, int c) FL_NOEXCEPT {
71 return ::strchr(s, c);
72}
73
74char* strrchr(char* s, int c) FL_NOEXCEPT {
75 return ::strrchr(s, c);
76}
77
78const char* strrchr(const char* s, int c) FL_NOEXCEPT {
79 return ::strrchr(s, c);
80}
81
82size_t strspn(const char* s1, const char* s2) FL_NOEXCEPT {
83 return ::strspn(s1, s2);
84}
85
86size_t strcspn(const char* s1, const char* s2) FL_NOEXCEPT {
87 return ::strcspn(s1, s2);
88}
89
90char* strpbrk(char* s1, const char* s2) FL_NOEXCEPT {
91 return ::strpbrk(s1, s2);
92}
93
94const char* strpbrk(const char* s1, const char* s2) FL_NOEXCEPT {
95 return ::strpbrk(s1, s2);
96}
97
98char* strtok(char* s1, const char* s2) FL_NOEXCEPT {
99 return ::strtok(s1, s2);
100}
101
102char* strerror(int errnum) FL_NOEXCEPT {
103 return ::strerror(errnum);
104}
105
106// ============================================================================
107// Memory Functions
108// ============================================================================
109
110void* memcpy(void* dest, const void* src, size_t n) FL_NOEXCEPT {
111 if (n == 0) return dest;
112 return ::memcpy(dest, src, n);
113}
114
115int memcmp(const void* s1, const void* s2, size_t n) FL_NOEXCEPT {
116 if (n == 0) return 0;
117 return ::memcmp(s1, s2, n);
118}
119
120void* memmove(void* dest, const void* src, size_t n) FL_NOEXCEPT {
121 if (n == 0) return dest;
122 return ::memmove(dest, src, n);
123}
124
125void* memset(void* s, int c, size_t n) FL_NOEXCEPT {
126 if (n == 0) return s;
127 return ::memset(s, c, n);
128}
129
130void* memchr(void* s, int c, size_t n) FL_NOEXCEPT {
131 if (n == 0) return nullptr;
132 return ::memchr(s, c, n);
133}
134
135const void* memchr(const void* s, int c, size_t n) FL_NOEXCEPT {
136 if (n == 0) return nullptr;
137 return ::memchr(s, c, n);
138}
139
140// ============================================================================
141// Arduino PROGMEM String Functions (platform-specific _P variants)
142// ============================================================================
143// Only available on platforms that support PROGMEM (AVR, some ARM boards)
144
145#if defined(ARDUINO) && defined(FL_IS_AVR)
146
147size_t strlen_P(detail::pgm_p s) FL_NOEXCEPT {
148 return ::strlen_P(fl::bit_cast<const char*>(s));
149}
150
151int strcmp_P(const char* a, detail::pgm_p b) FL_NOEXCEPT {
152 return ::strcmp_P(a, fl::bit_cast<const char*>(b));
153}
154
155int memcmp_P(const void* a, detail::pgm_p b, size_t n) FL_NOEXCEPT {
156 return ::memcmp_P(a, b, n);
157}
158
159void* memcpy_P(void* dest, detail::pgm_p src, size_t n) FL_NOEXCEPT {
160 return ::memcpy_P(dest, src, n);
161}
162
163#endif // defined(ARDUINO) && defined(FL_IS_AVR)
164
165} // 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 * 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
To bit_cast(const From &from) FL_NOEXCEPT
Definition bit_cast.h:48
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