23 #ifndef __CLRX_UTILITIES_H__ 24 #define __CLRX_UTILITIES_H__ 66 explicit Exception(
const std::string& message);
71 const
char* what() const noexcept;
91 ParseException(LineNo lineNo, ColNo charNo,
const std::string& message);
100 FLAGS_ALL = 0xffffffffU
107 DYNLIB_MODE1_MASK = 7,
116 static std::mutex mutex;
123 DynLibrary(
const char* filename, Flags flags = 0);
130 void load(
const char* filename, Flags flags = 0);
135 void* getSymbol(
const char* symbolName);
138 operator bool()
const 139 {
return handle!=
nullptr; }
143 {
return handle==
nullptr; }
146 bool isLoaded()
const 147 {
return handle!=
nullptr; }
153 inline bool isSpace(
unsigned char c);
156 {
return (c == 32 || (c < 32 && (0x3e00U & (1U<<c)))); }
159 inline bool isODigit(
unsigned char c);
162 {
return c>=
'0' && c<=
'7'; }
165 inline bool isDigit(
unsigned char c);
168 {
return c>=
'0' && c<=
'9'; }
171 inline bool isXDigit(
unsigned char c);
174 {
return (c>=
'0' && c<=
'9') || (c>=
'a' && c<='f') || (c>=
'A' && c<=
'F'); }
177 inline bool isAlpha(
unsigned char c);
180 {
return (c>=
'a' && c<=
'z') || (c>=
'A' && c<=
'Z'); }
183 inline bool isAlnum(
unsigned char c);
186 {
return (c>=
'0' && c<=
'9') || (c>=
'a' && c<='z') || (c>=
'A' && c<=
'Z'); }
202 const char* t = s+length;
203 if (t == s)
return s;
204 for (t--; t != s-1 &&
isSpace(*t); t--);
224 extern T
cstrtovCStyle(
const char* str,
const char* inend,
const char*& outend);
235 const char* var = getenv(envVar);
243 {
return cstrtovCStyle<T>(var,
nullptr, outend); }
245 {
return defaultValue; }
296 #ifndef __UTILITIES_MODULE__ 300 std::string parseEnvVariable<std::string>(
const char* envVar,
301 const std::string& defaultValue);
314 { return ::strcmp(c1, c2)<0; }
322 { return ::strcasecmp(c1, c2)<0; }
330 { return ::strcmp(c1, c2)==0; }
343 for (
const char* p = c; *p != 0; p++)
344 hash = ((hash<<8)^(
cxbyte)*p)*size_t(0xbf146a3dU);
357 return __builtin_clz(v);
360 for (uint32_t t = 1U<<31; t > v; t>>=1, count++);
368 return __builtin_clzll(v);
371 for (uint64_t t = 1ULL<<63; t > v; t>>=1, count++);
377 template<
typename T,
typename T2>
379 {
return ((a+b)>c) || ((a+b)<a); }
382 template<
typename T,
typename T2>
384 {
return ((a+b)>=c) || ((a+b)<a); }
408 size_t outMaxSize,
char* outStr,
size_t& outSize);
419 extern cxuint cstrtoui(
const char* str,
const char* inend,
const char*& outend);
423 const char*& outend,
cxuint bits);
426 extern uint64_t
cstrtouXCStyle(
const char* str,
const char* inend,
427 const char*& outend,
cxuint bits);
437 extern uint64_t
cstrtofXCStyle(
const char* str,
const char* inend,
438 const char*& outend,
cxuint expBits,
cxuint mantisaBits);
544 cxuint width,
bool prefix);
548 cxuint width,
bool prefix);
562 cxuint width = 0,
bool prefix =
true);
567 cxuint width,
bool prefix)
568 {
return uXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
573 cxuint width,
bool prefix)
574 {
return iXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
579 cxuint width,
bool prefix)
580 {
return uXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
585 cxuint width,
bool prefix)
586 {
return iXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
591 cxuint width,
bool prefix)
592 {
return uXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
597 cxuint width,
bool prefix)
598 {
return iXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
603 cxuint width,
bool prefix)
604 {
return uXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
609 cxuint width,
bool prefix)
610 {
return iXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
615 cxuint width ,
bool prefix)
616 {
return uXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
621 cxuint width,
bool prefix)
622 {
return iXtocstrCStyle(value, str, maxSize, radix, width, prefix); }
625 extern size_t fXtocstrCStyle(uint64_t value,
char* str,
size_t maxSize,
640 bool scientific =
false);
643 {
return fXtocstrCStyle(value, str, maxSize, scientific, 5, 10); }
657 bool scientific =
false);
659 inline size_t ftocstrCStyle(
float value,
char* str,
size_t maxSize,
bool scientific)
680 size_t dtocstrCStyle(
double value,
char* str,
size_t maxSize,
681 bool scientific =
false);
683 inline size_t dtocstrCStyle(
double value,
char* str,
size_t maxSize,
bool scientific)
713 extern std::string
joinPaths(
const std::string& path1,
const std::string& path2);
721 extern void makeDir(
const char* dirname);
742 mutable std::atomic<size_t> refCount;
751 refCount.fetch_add(1);
757 return (refCount.fetch_sub(1) == 1);
765 mutable size_t refCount;
780 return (--refCount == 0);
796 explicit RefPtr(T* inputPtr) : ptr(inputPtr)
808 { refPtr.ptr =
nullptr; }
814 if (ptr->unreference())
822 if (ptr->unreference())
824 if (refPtr.ptr !=
nullptr)
825 refPtr.ptr->reference();
833 if (ptr->unreference())
836 refPtr.ptr =
nullptr;
842 {
return ptr == refPtr.ptr; }
845 {
return ptr != refPtr.ptr; }
848 operator bool()
const 849 {
return ptr!=
nullptr; }
853 {
return ptr==
nullptr; }
863 if (ptr->unreference())
877 template<
typename DestType>
880 DestType* p =
const_cast<DestType*
>(ptr);
886 template<
typename DestType>
889 DestType* p =
static_cast<DestType*
>(ptr);
895 template<
typename DestType>
898 DestType* p =
dynamic_cast<DestType*
>(ptr);
909 {
return (c >=
'A' && c <=
'Z') ? c -
'A' +
'a' : c; }
915 { std::transform(
string.begin(),
string.end(),
string.begin(), toLower); }
922 for (; *cstr!=0; cstr++)
930 {
if (!
string.empty())
937 {
return (c >=
'a' && c <=
'z') ? c -
'a' +
'A' : c; }
943 { std::transform(
string.begin(),
string.end(),
string.begin(), toUpper); }
950 for (; *cstr!=0; cstr++)
958 {
if (!
string.empty())
963 #ifdef HAVE_CALL_ONCE 968 template<
class Callable,
class... Args>
969 inline void callOnce(std::once_flag& flag, Callable&& f, Args&&... args)
970 { std::call_once(flag, f, args...); }
972 struct OnceFlag: std::atomic<int>
979 template<
class Callable,
class... Args>
980 inline void callOnce(OnceFlag& flag, Callable&& f, Args&&... args)
982 if (flag.exchange(1) == 0)
reference countable object
Definition: Utilities.h:739
template bool parseEnvVariable< bool >(const char *envVar, const bool &defaultValue)
parse environment variable of boolean type
bool operator!=(const RefPtr< T > &refPtr) const
unequality operator
Definition: Utilities.h:844
function class that returns true if C strings are equal
Definition: Utilities.h:326
function class that returns true if first C string is less than second (ignore case) ...
Definition: Utilities.h:318
int64_t cstrtoiXCStyle(const char *str, const char *inend, const char *&outend, cxuint bits)
parse 64-bit signed integer
cxlong cstrtovCStyle< cxlong >(const char *str, const char *inend, const char *&outend)
parse cxlong value from string
Definition: Utilities.h:482
bool isFileExists(const char *path)
returns true if file exists
std::string escapeStringCStyle(size_t strSize, const char *str)
escapes string into C-style string
non copyable and non movable base structure (class)
Definition: Utilities.h:43
bool operator!() const
return true if null
Definition: Utilities.h:852
uint64_t lo
low part
Definition: Utilities.h:432
bool unreference() const
unreference object (returns true if no reference count)
Definition: Utilities.h:755
template cxint parseEnvVariable< cxint >(const char *envVar, const cxint &defaultValue)
parse environment variable of cxint type
bool operator()(const char *c1, const char *c2) const
operator of call
Definition: Utilities.h:329
uint32_t Flags
type for declaring various flags
Definition: Utilities.h:97
cxuint cstrtovCStyle< cxuint >(const char *str, const char *inend, const char *&outend)
parse cxuint value from string
Definition: Utilities.h:457
size_t itocstrCStyle< cxullong >(cxullong value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxullong value to string
Definition: Utilities.h:614
template cxushort parseEnvVariable< cxushort >(const char *envVar, const cxushort &defaultValue)
parse environment variable of cxushort type
void makeDir(const char *dirname)
create directory
template cxuchar parseEnvVariable< cxuchar >(const char *envVar, const cxuchar &defaultValue)
parse environment variable of cxuchar type
template double parseEnvVariable< double >(const char *envVar, const double &defaultValue)
parse environment variable of double type
const char * c_str() const
return C-style string pointer
Definition: CString.h:252
size_t iXtocstrCStyle(int64_t value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
formast signed value to string
bool isDirectory(const char *path)
returns true if path refers to directory
reference pointer based on Glibmm refptr
Definition: Utilities.h:786
RefPtr< DestType > staticCast() const
static cast
Definition: Utilities.h:887
bool unreference() const
unreference object (returns true if no reference count)
Definition: Utilities.h:778
template cxullong parseEnvVariable< cxullong >(const char *envVar, const cxullong &defaultValue)
parse environment variable of cxullong type
signed short cxshort
signed short
Definition: Config.h:217
template cxchar parseEnvVariable< cxchar >(const char *envVar, const cxchar &defaultValue)
parse environment variable of cxchar type
treat symbols locally
Definition: Utilities.h:104
cxullong cstrtovCStyle< cxullong >(const char *str, const char *inend, const char *&outend)
parse cxullong value from string
Definition: Utilities.h:487
size_t fXtocstrCStyle(uint64_t value, char *str, size_t maxSize, bool scientific, cxuint expBits, cxuint mantisaBits)
format float value to string
signed char cxchar
signed character (signed byte)
Definition: Config.h:211
Unsigned 128-bit integer.
Definition: Utilities.h:430
size_t itocstrCStyle< cxushort >(cxushort value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxushort value to string
Definition: Utilities.h:578
RefPtr< DestType > constCast() const
const cast
Definition: Utilities.h:878
bool operator()(const char *c1, const char *c2) const
operator of call
Definition: Utilities.h:313
std::string findAmdOCL()
find amdocl library, returns path if found, otherwise returns empty string
signed long cxlong
signed long
Definition: Config.h:225
RefCountable()
constructor
Definition: Utilities.h:745
RefPtr(T *inputPtr)
constructor from pointer
Definition: Utilities.h:796
an array class
Definition: Containers.h:38
RefPtr< DestType > dynamicCast() const
dynamic cast
Definition: Utilities.h:896
cxuint CLZ32(uint32_t v)
counts leading zeroes for 32-bit unsigned integer. For zero behavior is undefined ...
Definition: Utilities.h:354
template cxuint parseEnvVariable< cxuint >(const char *envVar, const cxuint &defaultValue)
parse environment variable of cxuint type
bool operator!() const
returns true if not loaded
Definition: Utilities.h:142
bool operator==(const RefPtr< T > &refPtr) const
equality operator
Definition: Utilities.h:841
bool isDigit(unsigned char c)
check whether character is digit
Definition: Utilities.h:167
std::string findMesaOCL()
find Mesa OpenCL library, returns path if found, otherwise returns empty string
size_t dtocstrCStyle(double value, char *str, size_t maxSize, bool scientific=false)
formats double float in C-style
Definition: Utilities.h:683
uint64_t getFileTimestamp(const char *filename)
get file timestamp in nanosecond since Unix epoch
~RefPtr()
destructor
Definition: Utilities.h:811
const char * skipSpaces(const char *s)
skip spaces from cString
Definition: Utilities.h:191
unsigned char cxuchar
unsigned character (unsigned byte)
Definition: Config.h:213
size_t itocstrCStyle< cxuchar >(cxuchar value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxuchar value to string
Definition: Utilities.h:566
RefPtr< T > & operator=(const RefPtr< T > &refPtr)
copy constructor
Definition: Utilities.h:819
template cxshort parseEnvVariable< cxshort >(const char *envVar, const cxshort &defaultValue)
parse environment variable of cxshort type
bool usumGt(T a, T b, T2 c)
safely compares sum of two unsigned integers with other unsigned integer
Definition: Utilities.h:378
UInt128 cstrtou128CStyle(const char *str, const char *inend, const char *&outend)
parse 128-bit unsigned integer
uint64_t cstrtouXCStyle(const char *str, const char *inend, const char *&outend, cxuint bits)
parse 64-bit unsigned integer
size_t ColNo
column number type
Definition: Utilities.h:78
template float parseEnvVariable< float >(const char *envVar, const float &defaultValue)
parse environment variable of float type
UInt128 cstrtovCStyle< UInt128 >(const char *str, const char *inend, const char *&outend)
parse UInt128 value from string
Definition: Utilities.h:497
size_t itocstrCStyle< cxulong >(cxulong value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxulong value to string
Definition: Utilities.h:602
cxint cstrtovCStyle< cxint >(const char *str, const char *inend, const char *&outend)
parse cxint value from string
Definition: Utilities.h:462
unsigned long long cxullong
unsigned long long
Definition: Config.h:231
unsigned char cxbyte
unsigned byte
Definition: Config.h:215
size_t ftocstrCStyle(float value, char *str, size_t maxSize, bool scientific=false)
formats single float in C-style
Definition: Utilities.h:659
const char * skipSpacesAtEnd(const char *s, size_t length)
skip spaces from cString
Definition: Utilities.h:200
reference countable object (only for single threading usage)
Definition: Utilities.h:762
Array< cxbyte > loadDataFromFile(const char *filename)
load data from file (any regular or pipe or device)
resolve symbols when is needed
Definition: Utilities.h:105
bool isODigit(unsigned char c)
check whether character is digit
Definition: Utilities.h:161
template cxlong parseEnvVariable< cxlong >(const char *envVar, const cxlong &defaultValue)
parse environment variable of cxlong type
bool isSpace(unsigned char c)
check whether character is space
Definition: Utilities.h:155
void toUpperString(std::string &string)
convert string to uppercase
Definition: Utilities.h:942
main namespace
Definition: AsmDefs.h:38
bool usumGe(T a, T b, T2 c)
safely compares sum of two unsigned integers with other unsigned integer
Definition: Utilities.h:383
T cstrtovCStyle(const char *str, const char *inend, const char *&outend)
parses integer or float point formatted looks like C-style
std::string findLLVMConfig()
find LLVM config, returns path if found, otherwise returns empty string
unsigned int cxuint
unsigned int
Definition: Config.h:223
resolve symbols now
Definition: Utilities.h:106
void reset()
reset refpointer
Definition: Utilities.h:860
cxuint cstrtoui(const char *str, const char *inend, const char *&outend)
parses unsigned integer regardless locales
float cstrtovCStyle< float >(const char *str, const char *inend, const char *&outend)
parse float value from string
Definition: Utilities.h:502
std::string getHomeDir()
get user's home directory
bool isAlnum(unsigned char c)
check whether character is digit
Definition: Utilities.h:185
size_t uXtocstrCStyle(uint64_t value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format unsigned value to string
bool isAlpha(unsigned char c)
check whether character is digit
Definition: Utilities.h:179
size_t itocstrCStyle< cxchar >(cxchar value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxchar value to string
Definition: Utilities.h:572
size_t itocstrCStyle< cxshort >(cxshort value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxshort value to string
Definition: Utilities.h:584
unsigned short cxushort
unsigned short
Definition: Config.h:219
treats symbols globally
Definition: Utilities.h:108
void toLowerString(std::string &string)
convert string to lowercase
Definition: Utilities.h:914
T parseEnvVariable(const char *envVar, const T &defaultValue=T())
parse environment variable
Definition: Utilities.h:233
unsigned long cxulong
unsigned long
Definition: Config.h:227
size_t operator()(const char *c) const
operator of call
Definition: Utilities.h:337
size_t itocstrCStyle< cxint >(cxint value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxint value to string
Definition: Utilities.h:596
uint64_t cstrtofXCStyle(const char *str, const char *inend, const char *&outend, cxuint expBits, cxuint mantisaBits)
parse 64-bit float value
generate hash function for C string
Definition: Utilities.h:334
void swap(RefPtr< T > &refPtr)
swap between refpointers
Definition: Utilities.h:869
signed long long cxllong
signed long long
Definition: Config.h:229
cxllong cstrtovCStyle< cxllong >(const char *str, const char *inend, const char *&outend)
parse cxllong value from string
Definition: Utilities.h:492
bool isXDigit(unsigned char c)
check whether character is hexadecimal digit
Definition: Utilities.h:173
cxshort cstrtovCStyle< cxshort >(const char *str, const char *inend, const char *&outend)
parse cxshort value from string
Definition: Utilities.h:472
Array< cxbyte > runExecWithOutput(const char *program, const char **argv)
run executable with output, returns array of output
cxuchar cstrtovCStyle< cxuchar >(const char *str, const char *inend, const char *&outend)
parse cxuchar value from string
Definition: Utilities.h:447
char toLower(char c)
convert character to lowercase
Definition: Utilities.h:908
size_t itocstrCStyle< cxlong >(cxlong value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxlong value to string
Definition: Utilities.h:608
NonCopyableAndNonMovable & operator=(const NonCopyableAndNonMovable &)=delete
copy-assignment
std::string message
message
Definition: Utilities.h:61
FastRefCountable()
constructor
Definition: Utilities.h:768
uint64_t hi
high part
Definition: Utilities.h:433
size_t htocstrCStyle(cxushort value, char *str, size_t maxSize, bool scientific=false)
formats half float in C-style
Definition: Utilities.h:642
exception class
Definition: Utilities.h:58
cxchar cstrtovCStyle< cxchar >(const char *str, const char *inend, const char *&outend)
parse cxchar value from string
Definition: Utilities.h:452
void reference() const
reference object
Definition: Utilities.h:772
parse exception class
Definition: Utilities.h:81
bool operator()(const char *c1, const char *c2) const
operator of call
Definition: Utilities.h:321
cxushort cstrtovCStyle< cxushort >(const char *str, const char *inend, const char *&outend)
parse cxushort value from string
Definition: Utilities.h:467
char toUpper(char c)
convert character to uppercase
Definition: Utilities.h:936
std::string joinPaths(const std::string &path1, const std::string &path2)
join two paths
uint64_t LineNo
line number type
Definition: Utilities.h:75
signed int cxint
signed int
Definition: Config.h:221
template cxllong parseEnvVariable< cxllong >(const char *envVar, const cxllong &defaultValue)
parse environment variable of cxllong type
RefPtr(const RefPtr< T > &refPtr)
copy constructor
Definition: Utilities.h:800
function class that returns true if first C string is less than second
Definition: Utilities.h:310
RefPtr(RefPtr< T > &&refPtr)
move constructor
Definition: Utilities.h:807
void callOnce(std::once_flag &flag, Callable &&f, Args &&...args)
callOnce - portable wrapper for std::call_once
Definition: Utilities.h:969
cxushort cstrtohCStyle(const char *str, const char *inend, const char *&outend)
parses half float formatted looks like C-style
Definition: Utilities.h:539
cxuint CLZ64(uint64_t v)
counts leading zeroes for 64-bit unsigned integer. For zero behavior is undefined ...
Definition: Utilities.h:365
template cxulong parseEnvVariable< cxulong >(const char *envVar, const cxulong &defaultValue)
parse environment variable of cxulong type
NonCopyableAndNonMovable()
constructor
Definition: Utilities.h:46
double cstrtovCStyle< double >(const char *str, const char *inend, const char *&outend)
parse double value from string
Definition: Utilities.h:514
std::once_flag OnceFlag
Once flag type (wrapper for std::once_flag)
Definition: Utilities.h:965
RefPtr()
empty constructor
Definition: Utilities.h:792
size_t itocstrCStyle(T value, char *str, size_t maxSize, cxuint radix=10, cxuint width=0, bool prefix=true)
formats an integer
size_t size() const
compute size
Definition: CString.h:272
simple C-string container
Definition: CString.h:38
size_t itocstrCStyle< cxuint >(cxuint value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxuint value to string
Definition: Utilities.h:590
dynamic library class
Definition: Utilities.h:112
containers and other utils for other libraries and programs
cxulong cstrtovCStyle< cxulong >(const char *str, const char *inend, const char *&outend)
parse cxulong value from string
Definition: Utilities.h:477
void filesystemPath(char *path)
convert to filesystem from unified path (with slashes)
size_t itocstrCStyle< cxllong >(cxllong value, char *str, size_t maxSize, cxuint radix, cxuint width, bool prefix)
format cxllong value to string
Definition: Utilities.h:620
RefPtr< T > & operator=(RefPtr< T > &&refPtr)
move constructor
Definition: Utilities.h:830
void reference() const
reference object
Definition: Utilities.h:749
T * operator->() const
get elem from pointer
Definition: Utilities.h:856