7namespace Stroika::Frameworks::Led {
14 inline size_t Led_tStrlen (
const Led_tChar* s)
20 inline int Led_tStrCmp (
const Led_tChar* l,
const Led_tChar* r)
24 return ::wcscmp (l, r);
27 inline int Led_tStrnCmp (
const Led_tChar* l,
const Led_tChar* r,
size_t n)
31 return ::wcsncmp (l, r, n);
34 inline const Led_tChar* Led_tStrChr (
const Led_tChar* s, Led_tChar c)
37 return ::wcschr (s, c);
39 inline Led_tString Led_WideString2tString (
const wstring& s)
43 inline wstring Led_tString2WideString (
const Led_tString& s)
48#if qTargetPlatformSDKUseswchar_t
49 inline SDKString Led_tString2SDKString (
const Led_tString& s)
51 return Foundation::Characters::String{s}.AsSDKString ();
55 inline Led_tString Led_SDKString2tString (
const SDKString& s)
60 inline unsigned short Led_ByteSwapFromMac (
unsigned short src)
64 inline short Led_ByteSwapFromMac (
short src)
74 inline unsigned short Led_ByteSwapFromWindows (
unsigned short src)
78 inline short Led_ByteSwapFromWindows (
short src)
82 inline unsigned long Led_ByteSwapFromWindows (
unsigned long src)
86 inline long Led_ByteSwapFromWindows (
long src)
91 inline void UInt16ToBuf (uint16_t u, uint16_t* realBuf)
93 unsigned char* buf = (
unsigned char*)realBuf;
94 buf[0] = (
unsigned char)(u >> 8);
95 buf[1] = (
unsigned char)u;
97 inline uint16_t BufToUInt16 (
const uint16_t* realBuf)
99 const unsigned char* buf = (
const unsigned char*)realBuf;
100 return (uint16_t)((((uint16_t)buf[0]) << 8) + (uint16_t)buf[1]);
102 inline void UInt32ToBuf (uint32_t ul, uint32_t* realBuf)
104 unsigned short* buf = (
unsigned short*)realBuf;
105 UInt16ToBuf ((
unsigned short)(ul >> 16), buf);
106 UInt16ToBuf ((
unsigned short)(ul), buf + 1);
108 inline uint32_t BufToUInt32 (
const uint32_t* buf)
110 unsigned short* bufAsShortArray = (
unsigned short*)buf;
111 return (((
unsigned long)BufToUInt16 (bufAsShortArray)) << 16) + BufToUInt16 (bufAsShortArray + 1);
114 inline void SizeTToBuf (
size_t ul, uint32_t* realBuf)
117 if (ul > numeric_limits<uint32_t>::max ()) {
118 Throw (range_error (
"size_t wont fit in 32-bits"));
120 UInt32ToBuf (
static_cast<uint32_t
> (ul), realBuf);
122 inline size_t BufToSizeT (
const uint32_t* buf)
125 uint32_t r = BufToUInt32 (buf);
126 return static_cast<size_t> (r);
129 template <
typename ARRAY_CONTAINER,
class T>
130 size_t IndexOf (
const ARRAY_CONTAINER& array, T item)
132 for (
auto i = array.begin (); i != array.end (); ++i) {
134 return (i - array.begin ());
140 inline Led_tChar* Led_NextChar (Led_tChar* fromHere)
145 inline const Led_tChar* Led_NextChar (
const Led_tChar* fromHere)
181 inline const Led_tChar* Led_PreviousChar ([[maybe_unused]]
const Led_tChar* startOfString,
const Led_tChar* fromHere)
185 Assert (startOfString < fromHere);
188 inline Led_tChar* Led_PreviousChar (Led_tChar* startOfString, Led_tChar* fromHere)
192 return ((Led_tChar*)Led_PreviousChar ((
const Led_tChar*)startOfString, (
const Led_tChar*)fromHere));
195 inline bool ValidateTextForCharsetConformance (
const Led_tChar*,
size_t)
201 inline unsigned Led_DigitCharToNumber (
char digitChar)
206 Require (digitChar >=
'0');
207 Require (digitChar <=
'9');
208 return (digitChar -
'0');
210 inline char Led_NumberToDigitChar (
unsigned digitValue)
215 Require (digitValue <= 9);
216 return static_cast<char> (digitValue +
'0');
219#if qStroika_Frameworks_Led_SupportClipboard
225 inline bool Led_ClipboardObjectAcquire::FormatAvailable (Led_ClipFormat clipType)
227#if qStroika_Foundation_Common_Platform_Windows
228 return (!!::IsClipboardFormatAvailable (clipType));
229#elif qStroika_FeatureSupported_XWindows
234 inline bool Led_ClipboardObjectAcquire::FormatAvailable_TEXT ()
236 if (FormatAvailable (kTEXTClipFormat)) {
241 inline Led_ClipboardObjectAcquire::~Led_ClipboardObjectAcquire ()
244#if qStroika_Foundation_Common_Platform_Windows
245 if (fLockedData !=
nullptr) {
246 ::GlobalUnlock (fLockedData);
250 inline bool Led_ClipboardObjectAcquire::GoodClip ()
const
252#if qStroika_Foundation_Common_Platform_Windows
253 return (fOSClipHandle !=
nullptr and fLockedData !=
nullptr);
258 inline void* Led_ClipboardObjectAcquire::GetData ()
const
260 Assert (GoodClip ());
261 return (fLockedData);
263 inline size_t Led_ClipboardObjectAcquire::GetDataLength ()
const
265 Assert (GoodClip ());
266#if qStroika_Foundation_Common_Platform_Windows
267 return (::GlobalSize (fOSClipHandle));
278 template <
typename LHS_STRINGISH,
typename RHS_STRINGISH>
279 bool Led_CasedStringsEqual_ (
const LHS_STRINGISH& lhs,
const RHS_STRINGISH& rhs,
bool ignoreCase)
281 if (lhs.length () != rhs.length ()) {
284 for (
size_t i = 0; i < lhs.length (); ++i) {
285 if (not Led_CasedCharsEqual (lhs[i], rhs[i], ignoreCase)) {
292 inline bool Led_CasedStringsEqual (
const string& lhs,
const string& rhs,
bool ignoreCase)
294 return Led_CasedStringsEqual_ (lhs, rhs, ignoreCase);
296 inline bool Led_CasedStringsEqual (
const string_view& lhs,
const string_view& rhs,
bool ignoreCase)
298 return Led_CasedStringsEqual_ (lhs, rhs, ignoreCase);
300 inline bool Led_CasedStringsEqual (
const string_view& lhs,
const string& rhs,
bool ignoreCase)
302 return Led_CasedStringsEqual_ (lhs, rhs, ignoreCase);
304 inline bool Led_CasedStringsEqual (
const string& lhs,
const string_view& rhs,
bool ignoreCase)
306 return Led_CasedStringsEqual_ (lhs, rhs, ignoreCase);
308 inline bool Led_CasedStringsEqual (
const char* lhs,
const string& rhs,
bool ignoreCase)
310 return Led_CasedStringsEqual_ (string_view{lhs}, rhs, ignoreCase);
312 inline bool Led_CasedStringsEqual (
const string& lhs,
const char* rhs,
bool ignoreCase)
314 return Led_CasedStringsEqual_ (lhs, string_view{rhs}, ignoreCase);
316 inline bool Led_CasedStringsEqual (
const char* lhs,
const string_view& rhs,
bool ignoreCase)
318 return Led_CasedStringsEqual_ (string_view{lhs}, rhs, ignoreCase);
320 inline bool Led_CasedStringsEqual (
const string_view& lhs,
const char* rhs,
bool ignoreCase)
322 return Led_CasedStringsEqual_ (lhs, string_view{rhs}, ignoreCase);
324 inline bool Led_CasedStringsEqual (
const char* lhs,
const char* rhs,
bool ignoreCase)
326 return Led_CasedStringsEqual_ (string_view{lhs}, string_view{rhs}, ignoreCase);
329CompileTimeFlagChecker_HEADER (Stroika::Frameworks::Led, qStroika_Frameworks_Led_ProvideIMESupport, qStroika_Frameworks_Led_ProvideIMESupport);
#define RequireNotNull(p)
#define CompileTimeFlagChecker_HEADER(NS_PREFIX, NAME, VALUE)
CompileTimeFlagChecker_HEADER () will generate a LINK ERROR if you ever compile a header with one val...
static String FromSDKString(const SDKChar *from)
basic_string< SDKChar > SDKString
constexpr Endian GetEndianness()
returns native (std::endian::native) Endianness flag. Can be complicated (mixed, etc)....
constexpr T EndianConverter(T value, Endian from, Endian to)
void Throw(T &&e2Throw)
identical to builtin C++ 'throw' except that it does helpful, type dependent DbgTrace() messages firs...