Cleaning in XString. Some method renaming.

This commit is contained in:
Jief L 2020-04-23 23:43:35 +03:00
parent 775d5abc5f
commit 73411bbc47
28 changed files with 260 additions and 304 deletions

2
.gitignore vendored
View File

@ -127,4 +127,4 @@ tools
#Eclipse build folder
/DEBUG_*/
/rEFIt_UEFI copy/
/rEFIt_UEFI copy*/

1
Xcode/CloverX64/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/mtoc_path.txt

View File

@ -92,6 +92,7 @@
9A28CD34241BC0DF00F3D247 /* strncmp_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A28CD2E241BC0DF00F3D247 /* strncmp_test.cpp */; };
9A28CD35241BC0DF00F3D247 /* strlen_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A28CD2F241BC0DF00F3D247 /* strlen_test.h */; };
9A28CD36241BC0DF00F3D247 /* strncmp_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A28CD30241BC0DF00F3D247 /* strncmp_test.h */; };
9A35A6182451FE1600CAFF76 /* XStringAbstract.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A35A6172451FE1500CAFF76 /* XStringAbstract.h */; };
9A4185B62439F29D00BEAFB8 /* LoadOptions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A4185B42439F29D00BEAFB8 /* LoadOptions_test.h */; };
9A4185B72439F29D00BEAFB8 /* LoadOptions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A4185B42439F29D00BEAFB8 /* LoadOptions_test.h */; };
9A4185B82439F29D00BEAFB8 /* LoadOptions_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A4185B42439F29D00BEAFB8 /* LoadOptions_test.h */; };
@ -889,6 +890,7 @@
9A28CD2E241BC0DF00F3D247 /* strncmp_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = strncmp_test.cpp; sourceTree = "<group>"; };
9A28CD2F241BC0DF00F3D247 /* strlen_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strlen_test.h; sourceTree = "<group>"; };
9A28CD30241BC0DF00F3D247 /* strncmp_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strncmp_test.h; sourceTree = "<group>"; };
9A35A6172451FE1500CAFF76 /* XStringAbstract.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringAbstract.h; sourceTree = "<group>"; };
9A4185B42439F29D00BEAFB8 /* LoadOptions_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadOptions_test.h; sourceTree = "<group>"; };
9A4185B52439F29D00BEAFB8 /* LoadOptions_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadOptions_test.cpp; sourceTree = "<group>"; };
9A9AEB90243F7B5600FBD7D8 /* unicode_conversions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unicode_conversions.cpp; sourceTree = "<group>"; };
@ -1445,12 +1447,13 @@
children = (
9A9AEB90243F7B5600FBD7D8 /* unicode_conversions.cpp */,
9A9AEB93243F7B5600FBD7D8 /* unicode_conversions.h */,
9A9AEB91243F7B5600FBD7D8 /* XStringArray.cpp */,
9A9AEB92243F7B5600FBD7D8 /* XStringArray.h */,
9AC77FB624176C04005CDD5C /* XArray.h */,
9AC77FB724176C04005CDD5C /* XObjArray.h */,
9A28CC91241AB33700F3D247 /* XString.cpp */,
9A28CC92241AB33700F3D247 /* XString.h */,
9A35A6172451FE1500CAFF76 /* XStringAbstract.h */,
9A9AEB91243F7B5600FBD7D8 /* XStringArray.cpp */,
9A9AEB92243F7B5600FBD7D8 /* XStringArray.h */,
9AC77FAF24176C04005CDD5C /* XStringWArray.cpp */,
9AC77FAC24176C04005CDD5C /* XStringWArray.h */,
9AC77FB424176C04005CDD5C /* XToolsCommon.cpp */,
@ -1536,6 +1539,7 @@
9A28CD36241BC0DF00F3D247 /* strncmp_test.h in Headers */,
9A105B7124483AE40006DE06 /* wchar.h in Headers */,
9AC7804A24176C04005CDD5C /* XPointer.h in Headers */,
9A35A6182451FE1600CAFF76 /* XStringAbstract.h in Headers */,
9AC7808E24176C04005CDD5C /* XToolsCommon.h in Headers */,
9AC7806D24176C04005CDD5C /* bootscreen.h in Headers */,
9AC7800E24176C04005CDD5C /* Settings.h in Headers */,
@ -2582,6 +2586,7 @@
"-fno-unwind-tables",
"-Wno-incompatible-ms-struct",
"-Wreorder",
"-Wchar-subscripts",
);
SUPPORTED_PLATFORMS = macosx;
USE_HEADERMAP = NO;
@ -2634,6 +2639,7 @@
"-fno-unwind-tables",
"-Wno-incompatible-ms-struct",
"-Wreorder",
"-Wchar-subscripts",
);
SUPPORTED_PLATFORMS = macosx;
USE_HEADERMAP = NO;

View File

@ -66,7 +66,7 @@ ld -arch x86_64 -u __ModuleEntryPoint -e __ModuleEntryPoint -preload -segalign
source "$edk2prefix"/Conf/mtoc_path.txt
source ./mtoc_path.txt
[[ $? == 0 ]] && "$MTOC" -subsystem UEFI_APPLICATION -align 0x20 ./"$outputname".dll ./"$outputname".pecoff
[[ $? == 0 ]] && dsymutil ./"$outputname".dll

View File

@ -147,7 +147,6 @@
9A4185BE2439F73A00BEAFB8 /* XStringArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XStringArray.cpp; sourceTree = "<group>"; };
9A4185BF2439F73A00BEAFB8 /* XStringArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XStringArray.h; sourceTree = "<group>"; };
9A4FFA7C2451C8330050B38B /* XString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XString.cpp; sourceTree = "<group>"; };
9A4FFA7D2451C8330050B38B /* XStringAbstract copy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XStringAbstract copy.h"; sourceTree = "<group>"; };
9A4FFA7F2451C88C0050B38B /* XString_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XString_test.h; sourceTree = "<group>"; };
9A4FFA802451C88D0050B38B /* XString_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XString_test.cpp; sourceTree = "<group>"; };
9A57C20A2418A1FD0029A39F /* global_test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = global_test.h; sourceTree = "<group>"; };
@ -210,7 +209,6 @@
isa = PBXGroup;
children = (
9A4FFA7C2451C8330050B38B /* XString.cpp */,
9A4FFA7D2451C8330050B38B /* XStringAbstract copy.h */,
9A57C266241A799B0029A39F /* XString.h */,
9A6BA73C2449977300BDA52C /* XStringAbstract.h */,
9A9AEB8C243F73CE00FBD7D8 /* unicode_conversions.cpp */,

View File

@ -99,7 +99,7 @@ void* AllocatePool(UINTN AllocationSize)
void* AllocateZeroPool(UINTN AllocationSize)
{
void* p = (void*)malloc((size_t)AllocationSize);
memset(p, 0, AllocationSize);
memset(p, 0, (size_t)AllocationSize);
return p;
}
@ -117,12 +117,12 @@ void FreePool(const void* Buffer)
void ZeroMem(void *Destination, UINTN Length)
{
memset(Destination, 0, Length);
memset(Destination, 0, (size_t)Length);
}
void SetMem(void *Destination, UINTN Length, char c)
{
memset(Destination, c, Length);
memset(Destination, c, (size_t)Length);
}
void CopyMem(void *Destination, void *Source, UINTN Length)

View File

@ -55,6 +55,10 @@ typedef UINTN RETURN_STATUS;
#define OPTIONAL
#define ASSERT(x)
#ifdef _MSC_VER
#define __typeof__(x) decltype(x)
#endif
void CpuDeadLoop(void);
void DebugLog(INTN DebugMode, const char *FormatString, ...);

View File

@ -18,12 +18,12 @@ extern "C" int main(int argc, const char * argv[])
(void)argv;
setlocale(LC_ALL, "en_US"); // to allow printf unicode char
printf("sizeof(wchar_t)=%lu\n", sizeof(wchar_t));
printf("sizeof(wchar_t)=%zu\n", sizeof(wchar_t));
printf("%lc\n", L'Ľ');
printf("sizeof(size_t)=%lu\n", sizeof(size_t));
printf("sizeof(long)=%lu\n", sizeof(long));
printf("sizeof(long long)=%lu\n", sizeof(long long));
printf("sizeof(size_t)=%lu\n", sizeof(size_t));
printf("sizeof(size_t)=%zu\n", sizeof(size_t));
printf("sizeof(long)=%zu\n", sizeof(long));
printf("sizeof(long long)=%zu\n", sizeof(long long));
printf("sizeof(size_t)=%zu\n", sizeof(size_t));
#ifndef _MSC_VER
//printf("%zu\n", (size_t)MAX_UINT64);
//printf("%zd\n", (size_t)MAX_UINT64);

View File

@ -414,7 +414,7 @@ checkCmdlineArguments() {
checkToolchain() {
case "$TOOLCHAIN" in
XCLANG|XCODE*) checkXcode ;;
*) export MTOC_PREFIX="${TOOLCHAIN_DIR}/bin/" ;;
*) ;;
esac
if [[ "$SYSNAME" == Linux ]]; then
@ -500,7 +500,9 @@ MainBuildScript() {
set +u
source ./edksetup.sh BaseTools
set -u
echo "MTOC=$MTOC_PREFIX/mtoc.NEW_jief" > "$WORKSPACE"/Conf/mtoc_path.txt
if [ ! -z "${MTOC_PREFIX:-}" ]; then
echo "MTOC=$MTOC_PREFIX/mtoc.NEW_jief" > "$WORKSPACE"/Xcode/CloverX64/mtoc_path.txt
fi
cd "$CLOVERROOT"
# else
# echo "Building from: $WORKSPACE"

View File

@ -8044,7 +8044,7 @@ SetFSInjection (
}
// check if blocking of caches is needed
if ( OSFLAG_ISSET(Entry->Flags, OSFLAG_NOCACHES) || Entry->LoadOptions.ExistIn("-f") ) {
if ( OSFLAG_ISSET(Entry->Flags, OSFLAG_NOCACHES) || Entry->LoadOptions.contains("-f") ) {
MsgLog ("Blocking kext caches\n");
// BlockCaches = TRUE;
// add caches to blacklist

View File

@ -63,10 +63,14 @@ class XArray
const TYPE& ElementAt(int nIndex) const;
TYPE& ElementAt(int nIndex);
const TYPE& operator[](xsize nIndex) const { return ElementAt(nIndex); }
TYPE& operator[](xsize nIndex) { return ElementAt(nIndex); }
const TYPE& operator[]( int nIndex) const { return ElementAt(nIndex); }
// const TYPE& operator[](xsize nIndex) const { return ElementAt(nIndex); }
// TYPE& operator[](xsize nIndex) { return ElementAt(nIndex); }
// const TYPE& operator[]( int nIndex) const { return ElementAt(nIndex); }
TYPE& operator[]( int nIndex) { return ElementAt(nIndex); }
// const TYPE& operator[]( unsigned long long nIndex) const { return ElementAt((size_t)nIndex); }
// const TYPE& operator[]( long long nIndex) const { return ElementAt((size_t)nIndex); }
TYPE& operator[]( unsigned long long nIndex) { return ElementAt((size_t)nIndex); }
TYPE& operator[]( long long nIndex) { return ElementAt((size_t)nIndex); }
operator const void *() const { return m_data; };
operator void *() { return m_data; };
@ -102,8 +106,8 @@ class XArray
void setEmpty();
bool isEmpty() const { return size() == 0; }
xsize IdxOf(TYPE& e) const;
bool ExistIn(TYPE& e) const { return IdxOf(e) != MAX_XSIZE; } //logically it should be named as Contains(e)
xsize indexOf(TYPE& e) const;
bool contains(TYPE& e) const { return indexOf(e) != MAX_XSIZE; } //logically it should be named as Contains(e)
};
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
@ -113,7 +117,7 @@ class XArray
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
template<class TYPE>
xsize XArray<TYPE>::IdxOf(TYPE& e) const
xsize XArray<TYPE>::indexOf(TYPE& e) const
{
xsize i;
@ -181,7 +185,7 @@ void XArray<TYPE>::CheckSize(xsize nNewSize, xsize nGrowBy)
nNewSize += nGrowBy;
m_data = (TYPE *)realloc((void *)m_data, nNewSize * sizeof(TYPE), m_allocatedSize * sizeof(TYPE) );
if ( !m_data ) {
DebugLog(2, "XArray<TYPE>::CheckSize(nNewSize=%llu, nGrowBy=%llu) : Xrealloc(%llu, %llu, %" PRIuPTR ") returned NULL. System halted\n", nNewSize, nGrowBy, m_allocatedSize, nNewSize*sizeof(TYPE), (uintptr_t)m_data);
DebugLog(2, "XArray<TYPE>::CheckSize(nNewSize=%zu, nGrowBy=%zu) : Xrealloc(%zu, %lu, %" PRIuPTR ") returned NULL. System halted\n", nNewSize, nGrowBy, m_allocatedSize, nNewSize*sizeof(TYPE), (uintptr_t)m_data);
panic();
}
// memset(&_Data[_Size], 0, (nNewSize-_Size) * sizeof(TYPE)); // Could help for debugging, but zeroing in not needed.

View File

@ -183,7 +183,7 @@ void XObjArrayNC<TYPE>::CheckSize(xsize nNewSize, xsize nGrowBy)
nNewSize += nGrowBy + 1;
_Data = (XObjArrayEntry<TYPE> *)realloc((void *)_Data, sizeof(XObjArrayEntry<TYPE>) * nNewSize, sizeof(XObjArrayEntry<TYPE>) * m_allocatedSize);
if ( !_Data ) {
DebugLog(2, "XObjArrayNC<TYPE>::CheckSize(nNewSize=%llu, nGrowBy=%llu) : Xrealloc(%llu, %llu, %" PRIuPTR ") returned NULL. System halted\n", nNewSize, nGrowBy, m_allocatedSize, sizeof(XObjArrayEntry<TYPE>) * nNewSize, (uintptr_t)_Data);
DebugLog(2, "XObjArrayNC<TYPE>::CheckSize(nNewSize=%zu, nGrowBy=%zu) : Xrealloc(%zu, %zu, %" PRIuPTR ") returned NULL. System halted\n", nNewSize, nGrowBy, m_allocatedSize, sizeof(XObjArrayEntry<TYPE>) * nNewSize, (uintptr_t)_Data);
panic();
}
// memset(&_Data[m_allocatedSize], 0, (nNewSize-m_allocatedSize) * sizeof(XObjArrayEntry<TYPE>));
@ -196,7 +196,7 @@ template<class TYPE>
TYPE &XObjArrayNC<TYPE>::ElementAt(xsize index)
{
if ( index >= _Len ) {
DebugLog(2, "XObjArray<TYPE>::ElementAt(xsize) -> operator [] - index (%llu) greater than length (%llu)\n", index, _Len);
DebugLog(2, "XObjArray<TYPE>::ElementAt(xsize) -> operator [] - index (%zu) greater than length (%zu)\n", index, _Len);
panic();
}
return *((TYPE *)(_Data[index].Object));
@ -207,7 +207,7 @@ template<class TYPE>
const TYPE &XObjArrayNC<TYPE>::ElementAt(xsize index) const
{
if ( index >= _Len ) {
DebugLog(2, "XObjArray<TYPE>::ElementAt(xsize) const -> operator [] - index (%llu) greater than length (%llu)\n", index, _Len);
DebugLog(2, "XObjArray<TYPE>::ElementAt(xsize) const -> operator [] - index (%zu) greater than length (%zu)\n", index, _Len);
panic();
}
return *((TYPE *)(_Data[index].Object));
@ -427,7 +427,7 @@ void XObjArrayNC<TYPE>::RemoveAtIndex(xsize nIndex)
if ( nIndex < XObjArrayNC<TYPE>::_Len )
{
if ( nIndex >= XObjArrayNC<TYPE>::_Len ) {
DebugLog(2, "void XObjArrayNC<TYPE>::RemoveAtIndex(xsize nIndex) : BUG nIndex (%llu) is > length(). System halted\n", nIndex);
DebugLog(2, "void XObjArrayNC<TYPE>::RemoveAtIndex(xsize nIndex) : BUG nIndex (%zu) is > length(). System halted\n", nIndex);
panic();
}
}

View File

@ -140,4 +140,9 @@ extern const XStringW NullXStringW;
XString SPrintf(const char* format, ...) __attribute__((__format__ (__printf__, 1, 2)));
XStringW SWPrintf(const char* format, ...) __attribute__((__format__ (__printf__, 1, 2)));
//
//XStringAbstract SubString(const T *S, size_t pos, size_t count);
//XStringAbstract CleanCtrl(const XStringAbstract &S);
#endif

View File

@ -49,17 +49,18 @@ struct XStringAbstract__true_type {
template <class _Tp>
struct XStringAbstract__make_unsigned {};
//template <> struct __make_unsigned<bool, true> {};
template <> struct XStringAbstract__make_unsigned< signed char> {typedef unsigned short type;};
template <> struct XStringAbstract__make_unsigned<unsigned char> {typedef unsigned short type;};
template <> struct XStringAbstract__make_unsigned< signed short> {typedef unsigned short type;};
template <> struct XStringAbstract__make_unsigned<unsigned short> {typedef unsigned short type;};
template <> struct XStringAbstract__make_unsigned< signed int> {typedef unsigned int type;};
template <> struct XStringAbstract__make_unsigned<unsigned int> {typedef unsigned int type;};
template <> struct XStringAbstract__make_unsigned< signed long> {typedef unsigned long type;};
template <> struct XStringAbstract__make_unsigned<unsigned long> {typedef unsigned long type;};
template <> struct XStringAbstract__make_unsigned< char> {typedef unsigned char type;};
template <> struct XStringAbstract__make_unsigned< signed char> {typedef unsigned char type;};
template <> struct XStringAbstract__make_unsigned<unsigned char> {typedef unsigned char type;};
template <> struct XStringAbstract__make_unsigned< signed short> {typedef unsigned short type;};
template <> struct XStringAbstract__make_unsigned<unsigned short> {typedef unsigned short type;};
template <> struct XStringAbstract__make_unsigned< signed int> {typedef unsigned int type;};
template <> struct XStringAbstract__make_unsigned<unsigned int> {typedef unsigned int type;};
template <> struct XStringAbstract__make_unsigned< signed long> {typedef unsigned long type;};
template <> struct XStringAbstract__make_unsigned<unsigned long> {typedef unsigned long type;};
template <> struct XStringAbstract__make_unsigned< signed long long> {typedef unsigned long long type;};
template <> struct XStringAbstract__make_unsigned<unsigned long long> {typedef unsigned long long type;};
#define unsigned_type(x) typename XStringAbstract__make_unsigned<x>::type
/* enable_if */
template <bool, typename T = void>
@ -210,22 +211,7 @@ size_t XStringAbstract__rindexOf(const O* s, size_t Pos, const P* other, bool to
return MAX_XSIZE;
}
//template<typename O, typename P>
//size_t XStringAbstract__rindexOf(const O* s, size_t Pos, const P* other, bool toLower)
//{
// size_t index = XStringAbstract__indexOf(s, 0, other, toLower);
// size_t prev_index = index; // initialize to index in case of index is already == Pos
// while ( index < Pos ) {
// prev_index = index;
// index = XStringAbstract__indexOf(s, index+1, other, toLower);
// };
// if ( index == Pos ) return index;
// if ( prev_index <= Pos ) return prev_index;
// return MAX_XSIZE;
//}
//template<class T, class SubType, size_t growBy>
template<class T, class ThisXStringClass>
class XStringAbstract
{
@ -233,13 +219,6 @@ public:
// const SubType NullXString;
static T nullChar;
//class XString16;
// XStringAbstract<T, ThisXStringClass>(const XStringAbstract<T, ThisXStringClass> &S)
// {
// Init(0);
// takeValueFrom(S);
// }
protected:
T *m_data;
size_t m_allocatedSize;
@ -255,7 +234,7 @@ protected:
T* _data(IntegralType pos) const
{
if ( pos<0 ) panic("T* data(int i) -> i < 0");
size_t offset = size_of_utf_string_len(m_data, (typename XStringAbstract__make_unsigned<IntegralType>::type)pos); // If pos is too big, size_of_utf_string_len returns the end of the string
size_t offset = size_of_utf_string_len(m_data, (unsigned_type(IntegralType))pos); // If pos is too big, size_of_utf_string_len returns the end of the string
return m_data + offset;
}
@ -327,8 +306,9 @@ public:
template<typename IntegralType, enable_if(is_integral(IntegralType))>
T* dataSized(IntegralType size)
{
if ( size<0 ) panic("T* dataSized(xisize i, size_t sizeMin, size_t nGrowBy) -> i < 0");
CheckSize((typename XStringAbstract__make_unsigned<IntegralType>::type)size);
if ( size<0 ) panic("T* dataSized() -> i < 0");
if ( (unsigned_type(IntegralType))size > MAX_XSIZE ) panic("T* dataSized() -> i > MAX_XSIZE");
CheckSize((size_t)size);
return _data(0);
}
//
@ -343,17 +323,6 @@ public:
// return _data(pos);
// }
// const T* data(unsigned int ui) const { return _data(ui); }
// const T* data(int i) const { return _data(i); }
// const T* data(size_t ui) const { return _data(ui); }
// const T* data(xisize i) const { return _data(i); }
//
// T* dataSized(unsigned int ui, size_t sizeMin, size_t nGrowBy=16) { CheckSize(ui+sizeMin, nGrowBy); return _data(ui); }
// T* dataSized(unsigned long ui, size_t sizeMin, size_t nGrowBy=16) { CheckSize(ui+sizeMin, nGrowBy); return _data(ui); }
// T* dataSized(unsigned long long ui, size_t sizeMin, size_t nGrowBy=16) { CheckSize(ui+sizeMin, nGrowBy); return _data(ui); }
// T* dataSized(int i, size_t sizeMin, size_t nGrowBy=16) { if ( i<0 ) panic("T* dataSized(xisize i, size_t sizeMin, size_t nGrowBy) -> i < 0"); CheckSize((unsigned int)i+sizeMin, nGrowBy); return _data(i); }
// T* dataSized(long i, size_t sizeMin, size_t nGrowBy=16) { if ( i<0 ) panic("T* dataSized(xisize i, size_t sizeMin, size_t nGrowBy) -> i < 0"); CheckSize((unsigned long)i+sizeMin, nGrowBy); return _data(i); }
// T* dataSized(long long i, size_t sizeMin, size_t nGrowBy=16) { if ( i<0 ) panic("T* dataSized(xisize i, size_t sizeMin, size_t nGrowBy) -> i < 0"); CheckSize((unsigned long long)i+sizeMin, nGrowBy); return _data(i); }
T* forgetDataWithoutFreeing()
{
@ -403,7 +372,7 @@ public:
panic("XStringAbstract::char32At(size_t i) : i >= length(). System halted\n");
}
nb += 1;
} while (nb <= (typename XStringAbstract__make_unsigned<IntegralType>::type)i );
} while (nb <= (unsigned_type(IntegralType))i);
return char32;
}
@ -496,16 +465,16 @@ public:
/* ctor */
template<typename O, class OtherXStringClass>
explicit XStringAbstract<T, ThisXStringClass>(const XStringAbstract<O, OtherXStringClass>& S) { Init(0); takeValueFrom(S); }
template<typename O>
explicit XStringAbstract<T, ThisXStringClass>(const O* S) { Init(0); takeValueFrom(S); }
// template<typename O>
// explicit XStringAbstract<T, ThisXStringClass>(const O* S) { Init(0); takeValueFrom(S); }
/* Copy Assign */ // Only other XString, no litteral at the moment.
XStringAbstract<T, ThisXStringClass>& operator =(const XStringAbstract<T, ThisXStringClass>& S) { strcpy(S.s()); return *this; }
/* Assign */
template<typename O, class OtherXStringClass>
ThisXStringClass& operator =(const XStringAbstract<O, OtherXStringClass>& S) { strcpy(S.s()); return *((ThisXStringClass*)this); }
template<class O>
ThisXStringClass& operator =(const O* S) { strcpy(S); return *this; }
// template<class O>
// ThisXStringClass& operator =(const O* S) { strcpy(S); return *this; }
/* += */
template<typename O, class OtherXStringClass>
@ -513,13 +482,6 @@ public:
template<typename O>
ThisXStringClass& operator += (const O* S) { strcat(S); return *((ThisXStringClass*)this); }
// + operator
// template<typename XStringClass, class OtherXStringClass>
// friend ThisXStringClass operator + (const XStringClass& p1, const XStringAbstract<O, OtherXStringClass>& p2) { XStringAbstract s; s=p1; s+=p2; return s; }
// template<typename O, enable_if(is_char(O))>
// friend ThisXStringClass operator + (const XStringAbstract<T, ThisXStringClass>& p1, const O* p2 ) { XStringAbstract s; s=p1; s+=p2; return s; }
// template<typename O, class OtherXStringClass, enable_if(is_char(O))>
// friend ThisXStringClass operator + (const O *p1, const XStringAbstract<T, ThisXStringClass>& p2) { XStringAbstract s; s.strcat(p1); s.strcat(p2.s()); return s; }
template<typename O, class OtherXStringClass>
ThisXStringClass operator + (const XStringAbstract<O, OtherXStringClass>& p2) const { XStringAbstract s; s=*this; s+=p2; return s; }
@ -541,10 +503,6 @@ public:
size_t indexOf(const O* S, size_t Pos = 0) const { return XStringAbstract__indexOf(m_data, Pos, S, false); }
template<typename O, class OtherXStringClass>
size_t indexOf(const XStringAbstract<O, OtherXStringClass>& S, size_t Pos = 0) const { return indexOf(S.s(), Pos); }
// old name : todo remove
size_t IdxOf(char c, size_t Pos = 0) const { return indexOf((char32_t)c, Pos); }
template<typename O, class OtherXStringClass>
size_t IdxOf(const XStringAbstract<O, OtherXStringClass>& S, size_t Pos = 0) const { return indexOf(S, Pos); }
/* IC */
size_t indexOfIC(char32_t char32Searched, size_t Pos = 0) const
{
@ -614,7 +572,7 @@ public:
// }
//}
XStringAbstract SubString(size_t pos, size_t count) const
XStringAbstract subString(size_t pos, size_t count) const
{
if ( count > length()-pos ) count = length()-pos;
XStringAbstract ret;
@ -631,13 +589,13 @@ public:
// todo rename to contains
template<typename O, class OtherXStringClass>
bool ExistIn(const XStringAbstract<O, OtherXStringClass>& S) const { return indexOf(S) != MAX_XSIZE; }
bool contains(const XStringAbstract<O, OtherXStringClass>& S) const { return indexOf(S) != MAX_XSIZE; }
template<typename O>
bool ExistIn(const O* S) const { return indexOf(S) != MAX_XSIZE; }
bool contains(const O* S) const { return indexOf(S) != MAX_XSIZE; }
template<typename O, class OtherXStringClass>
size_t ExistInIC(const XStringAbstract<O, OtherXStringClass>& S) const { return indexOfIC(S) != MAX_XSIZE; }
size_t containsIC(const XStringAbstract<O, OtherXStringClass>& S) const { return indexOfIC(S) != MAX_XSIZE; }
template<typename O>
size_t ExistInIC(const O* S) const { return indexOfIC(S) != MAX_XSIZE; }
size_t containsIC(const O* S) const { return indexOfIC(S) != MAX_XSIZE; }
// void ToLower(bool FirstCharIsCap = false);
@ -723,12 +681,10 @@ public:
// int Compare(const wchar_t* S) const { return ::Compare<T, wchar_t>(m_data, S); };
//
template<typename O, class OtherXStringClass>
bool Equal(const O* S) const { return XStringAbstract__compare(m_data, S, false); }
template<typename O, class OtherXStringClass>
bool EqualIC(const XStringAbstract<O, OtherXStringClass>& S) const { return XStringAbstract__compare(m_data, S.s(), true); }
bool equalIC(const XStringAbstract<O, OtherXStringClass>& S) const { return XStringAbstract__compare(m_data, S.s(), true) == 0; }
template<typename O>
bool EqualIC(const O* S) const { return XStringAbstract__compare(m_data, S, true); }
// bool BeginingEqual(const T* S) const { return (memcmp(data(), S, wcslen(S)) == 0); }
bool equalIC(const O* S) const { return XStringAbstract__compare(m_data, S, true) == 0; }
// bool startWith(const T* S) const { return (memcmp(data(), S, wcslen(S)) == 0); }
// bool SubStringEqual(size_t Pos, const T* S) const { return (memcmp(data(Pos), S, wcslen(S)) == 0); }
public:
@ -784,18 +740,6 @@ T XStringAbstract<T, ThisXStringClass>::nullChar = 0;
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// Constructor
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//
//template<class T, class SubType, size_t growBy>
//XStringAbstract<T>::XStringAbstract(const XStringAbstract &aString)
//{
//DBG_XSTRING("Constructor(const XStringAbstract &aString) : %ls\n", aString.data());
// Init(aString.size());
// memcpy(m_data, aString.m_data, aString.sizeInBytes());
//}
//
@ -838,57 +782,6 @@ T XStringAbstract<T, ThisXStringClass>::nullChar = 0;
//-----------------------------------------------------------------------------
// Functions
//-----------------------------------------------------------------------------
//XStringAbstract operator"" _XSW ( const T* s, size_t len)
//{
// XStringAbstract returnValue;
// if ( len > MAX_XSIZE ) len = MAX_XSIZE;
// returnValue.takeValueFrom(s, len);
// return returnValue; // don't do "return returnValue.takeValueFrom(s, len)" because it break the return value optimization.
//}
//
//XStringAbstract SWPrintf(const char* format, ...)
//{
// va_list va;
// XStringAbstract str;
//
// va_start (va, format);
// str.vSWPrintf(format, va);
// va_end(va);
//
// return str;
//}
//
//XStringAbstract SubString(const T *S, size_t pos, size_t count)
//{
// if ( wcslen(S)-pos < count ) count = wcslen(S)-pos;
// XStringAbstract ret;
// ret.StrnCpy(S+pos, count);
//// return ( XStringAbstract(S+pos, count) );
// return ret;
//}
//
//
//XStringAbstract CleanCtrl(const XStringAbstract &S)
//{
// XStringAbstract ReturnValue;
// size_t i;
//
// for ( i=0 ; i<S.size() ; i+=1 ) {
//#if __WCHAR_MIN__ < 0
// if ( S.wc_str()[i] >=0 && S.wc_str()[i] < ' ' ) ReturnValue += 'x'; /* T are signed */
//#else
// if ( S.wc_str()[i] < ' ' ) ReturnValue += 'x'; /* T are unsigned */
//#endif
// else ReturnValue += S.wc_str()[i];
// }
// return ReturnValue;
//}
@ -897,24 +790,11 @@ T XStringAbstract<T, ThisXStringClass>::nullChar = 0;
#undef DBG_XSTRING
#undef is_integral
//#undef enable_if
#undef asciiToLower
//
//extern const XStringAbstract NullXStringAbstract;
//
//XStringAbstract operator"" _XSW ( const T* s, size_t len);
//
//XStringAbstract SWPrintf(const char* format, ...) __attribute__((__format__(__printf__, 1, 2)));
//XStringAbstract SubString(const T *S, size_t pos, size_t count);
//XStringAbstract CleanCtrl(const XStringAbstract &S);
#undef unsigned_type
#undef is_integral
#undef is_char
#undef enable_if

View File

@ -124,16 +124,16 @@ void XStringArray::AddID(const XStringArray &aStrings)
XStringArray Split(const XString &S, const XString &Separator)
{
XStringArray Ss;
xsize idxB, idxE;
size_t idxB, idxE;
idxB = 0;
idxE = S.IdxOf(Separator, idxB);
idxE = S.indexOf(Separator, idxB);
while ( idxE != MAX_XSIZE ) {
Ss.AddCopy(S.SubString(idxB, idxE-idxB));
Ss.AddCopy(S.subString(idxB, idxE-idxB));
idxB = idxE + Separator.length();
idxE = S.IdxOf(Separator, idxB);
idxE = S.indexOf(Separator, idxB);
}
if ( idxB < S.length() ) Ss.AddCopy(S.SubString(idxB, S.length()-idxB));
if ( idxB < S.length() ) Ss.AddCopy(S.subString(idxB, S.length()-idxB));
return Ss;
}

View File

@ -132,11 +132,11 @@ XStringWArray Split(const XStringW &S, const XStringW &Separator)
idxB = 0;
idxE = S.indexOf(Separator, idxB);
while ( idxE != MAX_XSIZE ) {
Ss.AddCopy(S.SubString(idxB, idxE-idxB));
Ss.AddCopy(S.subString(idxB, idxE-idxB));
idxB = idxE + Separator.length();
idxE = S.indexOf(Separator, idxB);
}
if ( idxB < S.length() ) Ss.AddCopy(S.SubString(idxB, S.length()-idxB));
if ( idxB < S.length() ) Ss.AddCopy(S.subString(idxB, S.length()-idxB));
return Ss;
}

View File

@ -4,10 +4,10 @@
#include <posix.h>
#define xsize UINTN
#define xisize INTN
#define MAX_XSIZE MAX_UINTN
#define MAX_XISIZE MAX_INTN
#define xsize size_t
//#define xisize INTN
#define MAX_XSIZE SIZE_T_MAX
//#define MAX_XISIZE MAX_INTN
extern xsize XArrayGrowByDefault;
extern xsize XBufferGrowByDefault;

View File

@ -15,7 +15,7 @@ CHAR16 *Old1_AddLoadOption(IN CONST CHAR16 *LoadOptions, IN CONST CHAR16 *LoadOp
return EfiStrDuplicate(LoadOption);
}
// If there is no option or it is already present duplicate original
// with XStringW it will be replaced by if (LoadOptions.ExistIn(LoadOption))
// with XStringW it will be replaced by if (LoadOptions.contains(LoadOption))
else if ((LoadOption == NULL) || StrStr(LoadOptions, LoadOption))
return EfiStrDuplicate(LoadOptions);
// Otherwise add option
@ -97,7 +97,7 @@ CHAR16 *Old1_RemoveLoadOption(IN CONST CHAR16 *LoadOptions, IN CONST CHAR16 *Loa
// }
// // If there is no option or it is already present duplicate original
// else {
// if ( LoadOptions.ExistIn(LoadOption) ) return LoadOptions;
// if ( LoadOptions.contains(LoadOption) ) return LoadOptions;
// // Otherwise add option
// return SPrintf("%s %s", LoadOptions.c_str(), LoadOption.c_str()); //LoadOptions + LoadOption
// }
@ -115,7 +115,7 @@ CHAR16 *Old1_RemoveLoadOption(IN CONST CHAR16 *LoadOptions, IN CONST CHAR16 *Loa
// // If there is no option to remove then duplicate original
// if (LoadOption.isEmpty()) return LoadOptions;
// // If not present duplicate original
// xsize Offset = LoadOptions.IdxOf(LoadOption);
// xsize Offset = LoadOptions.indexOf(LoadOption);
// if ( Offset == MAX_XSIZE ) return LoadOptions;
//
// // Get placement of option in original options

View File

@ -24,15 +24,15 @@ struct make_unsigned
{
};
//template <> struct __make_unsigned<bool, true> {};
template <> struct make_unsigned< signed char> {typedef unsigned short type;};
template <> struct make_unsigned<unsigned char> {typedef unsigned short type;};
template <> struct make_unsigned< signed short> {typedef unsigned short type;};
template <> struct make_unsigned<unsigned short> {typedef unsigned short type;};
template <> struct make_unsigned< signed int> {typedef unsigned int type;};
template <> struct make_unsigned<unsigned int> {typedef unsigned int type;};
template <> struct make_unsigned< signed long> {typedef unsigned long type;};
template <> struct make_unsigned<unsigned long> {typedef unsigned long type;};
template <> struct make_unsigned< char> {typedef unsigned char type;};
template <> struct make_unsigned< signed char> {typedef unsigned char type;};
template <> struct make_unsigned<unsigned char> {typedef unsigned char type;};
template <> struct make_unsigned< signed short> {typedef unsigned short type;};
template <> struct make_unsigned<unsigned short> {typedef unsigned short type;};
template <> struct make_unsigned< signed int> {typedef unsigned int type;};
template <> struct make_unsigned<unsigned int> {typedef unsigned int type;};
template <> struct make_unsigned< signed long> {typedef unsigned long type;};
template <> struct make_unsigned<unsigned long> {typedef unsigned long type;};
template <> struct make_unsigned< signed long long> {typedef unsigned long long type;};
template <> struct make_unsigned<unsigned long long> {typedef unsigned long long type;};
@ -197,6 +197,7 @@ struct TestStringMultiCoded
const TestStringMultiCoded testStringMultiCodedArray[] = {
testStringArray_LINE(""),
testStringArray_LINE("a"),
#ifndef _MSC_VER
testStringArray_LINE(utf8_1),
testStringArray_LINE(utf8_2),
testStringArray_LINE(utf8_3),
@ -208,6 +209,7 @@ const TestStringMultiCoded testStringMultiCodedArray[] = {
// testStringArray_LINE(utf8_9),
// testStringArray_LINE(utf8_10),
// testStringArray_LINE(utf8_11),
#endif
};
size_t nbTestStringMultiCoded = *(&testStringMultiCodedArray + 1) - testStringMultiCodedArray;
@ -400,12 +402,24 @@ bool displayOnlyIfFailed_tmp;
__TEST2(test, XStringClass, classEncoding, encoding1, utf32); \
__TEST2(test, XStringClass, classEncoding, encoding1, wchar); \
/* Warning about array indexes of char type is on, so don't test it
TODO disable warning with pragma and uncomment to test with char */
#define TEST_ALL_INTEGRAL(test, XStringClass, classEncoding) \
__TEST1(test, XStringClass, classEncoding, signed char); \
__TEST1(test, XStringClass, classEncoding, unsigned char); \
/*__TEST1(test, XStringClass, classEncoding, char);*/ \
/*__TEST1(test, XStringClass, classEncoding, signed char);*/ \
/*__TEST1(test, XStringClass, classEncoding, unsigned char);*/ \
__TEST1(test, XStringClass, classEncoding, short); \
__TEST1(test, XStringClass, classEncoding, signed short); \
__TEST1(test, XStringClass, classEncoding, unsigned short); \
__TEST1(test, XStringClass, classEncoding, int); \
__TEST1(test, XStringClass, classEncoding, signed int); \
__TEST1(test, XStringClass, classEncoding, unsigned int); \
__TEST1(test, XStringClass, classEncoding, long); \
__TEST1(test, XStringClass, classEncoding, signed long); \
__TEST1(test, XStringClass, classEncoding, unsigned long); \
__TEST1(test, XStringClass, classEncoding, long long); \
__TEST1(test, XStringClass, classEncoding, signed long long); \
__TEST1(test, XStringClass, classEncoding, unsigned long long); \
#define TEST_ALL_UTF(test, XStringClass, classEncoding) \
@ -585,9 +599,9 @@ SimpleString testEmpty_()
testEmpty_<XStringClass>(); \
/***************************** char32At_u *****************************/
/***************************** char32At *****************************/
template<class XStringClass, typename integralType, class InitialValue>
SimpleString testchar32At_u_(const InitialValue& initialValue)
SimpleString testchar32At_(const InitialValue& initialValue)
{
TEST_TITLE(displayOnlyFailed, sprintf("Test %s::char32At_u()", XStringClassInfo<XStringClass>::xStringClassName));
@ -603,13 +617,35 @@ SimpleString testchar32At_u_(const InitialValue& initialValue)
return SimpleString();
}
#define testchar32At_u(XStringClass, classEncoding, integralType) \
printf("Test %s::testchar32At_u\n", STRINGIFY(XStringClass)); \
#define testchar32At(XStringClass, classEncoding, integralType) \
printf("Test %s::testchar32At\n", STRINGIFY(XStringClass)); \
for ( size_t i = 0 ; i < nbTestStringMultiCoded ; i++ ) { \
testchar32At_u_<XStringClass, integralType>(testStringMultiCodedArray[i].classEncoding); \
testchar32At_<XStringClass, integralType>(testStringMultiCodedArray[i].classEncoding); \
}
/***************************** dataSized *****************************/
template<class XStringClass, typename integralType>
SimpleString testdataSized_()
{
TEST_TITLE(displayOnlyFailed, sprintf("Test %s::dataSized()", XStringClassInfo<XStringClass>::xStringClassName));
XStringClass xstr;
integralType i = 10;
typename XStringClassInfo<XStringClass>::ch_t* s = xstr.dataSized(i);
(void)s;
CHECK_RESULT(xstr.allocatedSize() >= 10,
sprintf("xstr[i] == dst.cha[i] (%d)", 10),
sprintf("xstr[i] != dst.cha[i] (%zu!=%d)", xstr.allocatedSize(), 10)
);
return SimpleString();
}
#define testdataSized(XStringClass, classEncoding, integralType) \
printf("Test %s::testdataSized\n", STRINGIFY(XStringClass)); \
testdataSized_<XStringClass, integralType>(); \
/***************************** strcpy *****************************/
@ -800,15 +836,15 @@ SimpleString teststrncat_(const InitialValue& initialValue, const ValueToCat& va
//xstr.takeValueFrom(initialValue.cha);
//xstr.strncat(valueToCat.cha, i);
size_t expectedSize = (utf_size_of_utf_string(&c, initialValue.cha) + utf_size_of_utf_string_len(&c, valueToCat.cha, i))*sizeof(ch_t);
CHECK_RESULT(xstr.sizeInBytes() == expectedSize,
sprintf("xstr.sizeInBytes() == expectedSize (%zu)", expectedSize),
sprintf("xstr.sizeInBytes() != expectedSize (%zu!=%zu)", xstr.sizeInBytes(), expectedSize)
size_t expectedSize = (utf_size_of_utf_string(&c, initialValue.cha) + utf_size_of_utf_string_len(&c, valueToCat.cha, i));
CHECK_RESULT(xstr.sizeInBytes() == expectedSize * sizeof(ch_t),
sprintf("xstr.sizeInBytes() == expectedSize (%zu)", expectedSize * sizeof(ch_t)),
sprintf("xstr.sizeInBytes() != expectedSize (%zu!=%zu)", xstr.sizeInBytes(), expectedSize * sizeof(ch_t))
);
ch_t* expectedString = (ch_t*)malloc(expectedSize*sizeof(ch_t)*sizeof(ch_t) + 1);
utf_string_from_utf_string(expectedString, expectedSize*sizeof(ch_t) + 1, initialValue.cha);
utf_string_from_utf_string_len(expectedString + utf_size_of_utf_string(&c, initialValue.cha), expectedSize*sizeof(ch_t) + 1 - size_of_utf_string(expectedString), valueToCat.cha, i);
ch_t* expectedString = (ch_t*)malloc((expectedSize+1)*sizeof(ch_t));
utf_string_from_utf_string(expectedString, expectedSize + 1, initialValue.cha);
utf_string_from_utf_string_len(expectedString + utf_size_of_utf_string(&c, initialValue.cha), expectedSize + 1 - size_of_utf_string(expectedString), valueToCat.cha, i);
CHECK_RESULT(memcmp(xstr.s(), expectedString, expectedSize+sizeof(ch_t)) == 0,
sprintf("memcmp(xstr.s(), expectedString, dst.size) == 0"),
sprintf("memcmp(xstr.s(), expectedString, dst.size) != 0")
@ -858,7 +894,7 @@ SimpleString testSubString_(const InitialValue& initialValue)
if ( pos < initialValue.utf32_length ) offset = utf_size_of_utf_string_len(&c, initialValue.cha, pos);
else offset = utf_size_of_utf_string(&c, initialValue.cha);
XStringClass subStr = str.SubString(pos, count);
XStringClass subStr = str.subString(pos, count);
CHECK_RESULT(subStr.length() == expectedLength,
sprintf("subStr.length() == expectedLength (%zu)", expectedLength),
@ -1091,7 +1127,7 @@ SimpleString testCompare_(const InitialValue& initialValue)
/***************************** indexOf, rindexOf *****************************/
template<class XStringClass, typename ch_t>
static void testIdxOf__(XStringClass subStr, bool ignoreCase,
static void testindexOf__(XStringClass subStr, bool ignoreCase,
size_t (XStringClass::*indexOfChar)(char32_t, size_t) const,
size_t (XStringClass::*indexOfString)(const ch_t*, size_t) const,
size_t (XStringClass::*rindexOfChar)(char32_t, size_t) const,
@ -1103,14 +1139,14 @@ static void testIdxOf__(XStringClass subStr, bool ignoreCase,
testStr = subStr;
if ( ignoreCase ) testStr.lowerAscii();
CHECK_RESULT((testStr.*indexOfString)(subStr.s(), 0) == 0,
sprintf("testStr.IdxOf(subStr.s(), 0) == 0"),
sprintf("testStr.IdxOf(subStr.s(), 0) != 0 (%zu)", (testStr.*indexOfString)(subStr.s(), 0))
sprintf("testStr.indexOf(subStr.s(), 0) == 0"),
sprintf("testStr.indexOf(subStr.s(), 0) != 0 (%zu)", (testStr.*indexOfString)(subStr.s(), 0))
);
(testStr.*indexOfString)(subStr.s(), 0);
size_t expectedPos = subStr.length()==0 ? testStr.length() : 0;
CHECK_RESULT((testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1) == expectedPos,
sprintf("testStr.IdxOf(subStr.s(), 0) == expectedPos (%zu)", expectedPos),
sprintf("testStr.IdxOf(subStr.s(), 0) != 0 (%zu!=%zu)", (testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1), expectedPos)
sprintf("testStr.indexOf(subStr.s(), 0) == expectedPos (%zu)", expectedPos),
sprintf("testStr.indexOf(subStr.s(), 0) != 0 (%zu!=%zu)", (testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1), expectedPos)
);
(testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1);
@ -1132,8 +1168,8 @@ static void testIdxOf__(XStringClass subStr, bool ignoreCase,
testStr.strcat(subStr.s());
if ( ignoreCase ) testStr.lowerAscii();
CHECK_RESULT((testStr.*indexOfString)(subStr.s(), 0) == 3,
sprintf("testStr.IdxOf(subStr.s(), 0) == 3"),
sprintf("testStr.IdxOf(subStr.s(), 0) != 3 (%zu)", (testStr.*indexOfString)(subStr.s(), 0))
sprintf("testStr.indexOf(subStr.s(), 0) == 3"),
sprintf("testStr.indexOf(subStr.s(), 0) != 3 (%zu)", (testStr.*indexOfString)(subStr.s(), 0))
);
(testStr.*indexOfString)(subStr.s(), 0);
CHECK_RESULT((testStr.*indexOfString)(subStr.s(), 0) == 3,
@ -1145,8 +1181,8 @@ static void testIdxOf__(XStringClass subStr, bool ignoreCase,
sprintf("(testStr.*indexOfString)(subStr[0]) != 3 (%zu)", (testStr.*indexOfChar)(subStr[0], 0))
);
CHECK_RESULT((testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1) == 3,
sprintf("testStr.IdxOf(subStr.s(), MAX_XSIZE-1) == 3"),
sprintf("testStr.IdxOf(subStr.s(), MAX_XSIZE-1) != 3 (%zu)", (testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1))
sprintf("testStr.indexOf(subStr.s(), MAX_XSIZE-1) == 3"),
sprintf("testStr.indexOf(subStr.s(), MAX_XSIZE-1) != 3 (%zu)", (testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1))
);
(testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1);
CHECK_RESULT((testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1) == 3,
@ -1163,8 +1199,8 @@ static void testIdxOf__(XStringClass subStr, bool ignoreCase,
testStr.strcat("");
if ( ignoreCase ) testStr.lowerAscii();
CHECK_RESULT((testStr.*indexOfString)(subStr.s(), 0) == 4,
sprintf("testStr.IdxOf(subStr.s(), 0) == 4"),
sprintf("testStr.IdxOf(subStr.s(), 0) != 4 (%zu)", (testStr.*indexOfString)(subStr.s(), 0))
sprintf("testStr.indexOf(subStr.s(), 0) == 4"),
sprintf("testStr.indexOf(subStr.s(), 0) != 4 (%zu)", (testStr.*indexOfString)(subStr.s(), 0))
);
(testStr.*indexOfString)(subStr.s(), 0);
CHECK_RESULT((testStr.*indexOfString)(subStr.s(), 0) == 4,
@ -1176,8 +1212,8 @@ static void testIdxOf__(XStringClass subStr, bool ignoreCase,
sprintf("(testStr.*indexOfString)(subStr[0]) != 4 (%zu)", (testStr.*indexOfChar)(subStr[0], 0))
);
CHECK_RESULT((testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1) == 4,
sprintf("testStr.IdxOf(subStr.s(), 0) == 4"),
sprintf("testStr.IdxOf(subStr.s(), 0) != 4 (%zu)", (testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1))
sprintf("testStr.indexOf(subStr.s(), 0) == 4"),
sprintf("testStr.indexOf(subStr.s(), 0) != 4 (%zu)", (testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1))
);
CHECK_RESULT((testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1) == 4,
sprintf("(testStr.*rindexOfString)(subStr.s(), 0) == 4"),
@ -1195,8 +1231,8 @@ static void testIdxOf__(XStringClass subStr, bool ignoreCase,
testStr.strcat("");
if ( ignoreCase ) testStr.lowerAscii();
CHECK_RESULT((testStr.*indexOfString)(subStr.s(), 0) == 5,
sprintf("testStr.IdxOf(subStr.s(), 0) == 5"),
sprintf("testStr.IdxOf(subStr.s(), 0) != 5 (%zu)", (testStr.*indexOfString)(subStr.s(), 0))
sprintf("testStr.indexOf(subStr.s(), 0) == 5"),
sprintf("testStr.indexOf(subStr.s(), 0) != 5 (%zu)", (testStr.*indexOfString)(subStr.s(), 0))
);
CHECK_RESULT((testStr.*indexOfString)(subStr.s(), 0) == 5,
sprintf("(testStr.*indexOfString)(subStr.s(), 0) == 5"),
@ -1207,8 +1243,8 @@ static void testIdxOf__(XStringClass subStr, bool ignoreCase,
sprintf("(testStr.*indexOfString)(subStr[0]) != 5 (%zu)", (testStr.*indexOfChar)(subStr[0], 0))
);
CHECK_RESULT((testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1) == 5 + subStr.length() + 6,
sprintf("testStr.IdxOf(subStr.s(), 0) == 5 + subStr.length() + 6"),
sprintf("testStr.IdxOf(subStr.s(), 0) != 5 + subStr.length() + 6 (%zu!=%zu)", (testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1), 5 + subStr.length() + 6)
sprintf("testStr.indexOf(subStr.s(), 0) == 5 + subStr.length() + 6"),
sprintf("testStr.indexOf(subStr.s(), 0) != 5 + subStr.length() + 6 (%zu!=%zu)", (testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1), 5 + subStr.length() + 6)
);
(testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1);
CHECK_RESULT((testStr.*rindexOfString)(subStr.s(), MAX_XSIZE-1) == 5 + subStr.length() + 6,
@ -1223,7 +1259,7 @@ static void testIdxOf__(XStringClass subStr, bool ignoreCase,
}
template<class XStringClass, class InitialValue>
SimpleString testIdxOf_(const InitialValue& initialValue)
SimpleString testindexOf_(const InitialValue& initialValue)
{
TEST_TITLE(displayOnlyFailed, sprintf("Test %s::idxOf", XStringClassInfo<XStringClass>::xStringClassName));
@ -1237,13 +1273,13 @@ SimpleString testIdxOf_(const InitialValue& initialValue)
for ( size_t pos = 0 ; pos < initialValue.utf32_length+3 ; pos+=1 ) {
for ( size_t count = 0 ; count < initialValue.utf32_length-pos+3 ; count+=1 )
{
ixs_t subStr = str.SubString(pos, count);
ixs_t subStr = str.subString(pos, count);
// size_t (ixs_t::*p)(const ich_t* S, size_t Pos) const = &ixs_t::template indexOf<ich_t>;
testIdxOf__<ixs_t, ich_t>(subStr, false, &ixs_t::indexOf, &ixs_t::template indexOf, &ixs_t::rindexOf, &ixs_t::template rindexOf);
testindexOf__<ixs_t, ich_t>(subStr, false, &ixs_t::indexOf, &ixs_t::template indexOf, &ixs_t::rindexOf, &ixs_t::template rindexOf);
ixs_t subStrLower = subStr;
testIdxOf__<ixs_t, ich_t>(subStrLower, true, &ixs_t::indexOfIC, &ixs_t::template indexOfIC, &ixs_t::rindexOfIC, &ixs_t::template rindexOfIC);
testindexOf__<ixs_t, ich_t>(subStrLower, true, &ixs_t::indexOfIC, &ixs_t::template indexOfIC, &ixs_t::rindexOfIC, &ixs_t::template rindexOfIC);
// if ( subStrLower != subStr ) {
// }
}
@ -1252,13 +1288,13 @@ SimpleString testIdxOf_(const InitialValue& initialValue)
return SimpleString();
}
#define testIdxOf(XStringClass, classEncoding, encoding) \
printf("Test %s::testIdxOf(%s)\n", STRINGIFY(XStringClass), STRINGIFY(encoding)); \
#define testindexOf(XStringClass, classEncoding, encoding) \
printf("Test %s::testindexOf(%s)\n", STRINGIFY(XStringClass), STRINGIFY(encoding)); \
for ( size_t i = 0 ; i < nbTestStringMultiCoded ; i++ ) { \
testIdxOf_<XStringClass>(testStringMultiCodedArray[i].encoding); \
testindexOf_<XStringClass>(testStringMultiCodedArray[i].encoding); \
} \
for ( size_t i = 0 ; i < nbTestStringMultiCoded4CaseArray ; i++ ) { \
testIdxOf_<XStringClass>(testStringMultiCoded4CaseArray[i].encoding); \
testindexOf_<XStringClass>(testStringMultiCoded4CaseArray[i].encoding); \
} \
@ -1278,7 +1314,7 @@ void func_test(XStringW& xsw)
(void)xsw;
}
int XStringx_tests()
int XString_tests()
{
#ifdef JIEF_DEBUG
// DebugLog(2, "XString16_tests -> Enter\n");
@ -1288,15 +1324,21 @@ int XStringx_tests()
//const char* cc = " ";
//char buf[64];
//char16_t* buf16 = (char16_t*)u"foo16";
XString x1;
x1.takeValueFrom("a");
XString x2;
x2.takeValueFrom("b");
XString x1("a"_XS);
XString x2("b"_XS);
XStringW xw1("c"_XS);
XStringW xw1; xw1.takeValueFrom("c");
char c = 1;
int ii = sizeof(size_t);
unsigned long long ull = SIZE_T_MAX;
unsigned long long ll = 3;
xw1.dataSized(c);
xw1.dataSized(ii);
xw1.dataSized(ull);
xw1.dataSized(ll);
auto x3 = xw1 = x1;
func_test(x3);
//auto x3 = xw1 = x1;
//func_test(x3);
//
//XStringAbstract__is_char_st<decltype(buf16)> a;
//printf("a.v()=%d\n", a.v());
@ -1313,22 +1355,34 @@ func_test(x3);
// testDefaultCtor<XString>("XString");
// XString16 a = u"toto"_XS16;
// teststrncpy_<XString>("utf8", testStringMultiCodedArray[1].utf8, testStringMultiCodedArray[1].wchar);
//testIdxOf(XString, utf8, utf16);
//testindexOf(XString, utf8, utf16);
//testCompare(XString, utf8, utf8);
testIdxOf_<XString>(testStringMultiCoded4CaseArray[0].utf8); \
//testindexOf_<XString>(testStringMultiCoded4CaseArray[0].utf8);
//size_t size = sizeof("ギ")-1; // this char is 6 bytes long !
const char* utf8 = "ギ"; (void)utf8;
size_t utf8_size = sizeof("ギ") - 1; (void)utf8_size; // this char is 6 bytes long !
const wchar_t* utfw = L"ギ"; (void)utfw;
size_t utfw_size = sizeof(L"ギ") - 1; (void)utfw_size; // this char is 6 bytes long !
const char16_t* utf16 = u"ギ"; (void)utf16;
size_t utf16_size = sizeof(u"ギ") - 1; (void)utf16_size; // this char is 6 bytes long !
const char32_t* utf32 = U"ギ"; (void)utf32;
size_t utf32_size = sizeof(U"ギ") - 1; (void)utf32_size; // this char is 6 bytes long !
//size_t size = sizeof("ꇉ")-1; // this char is 3 bytes long
//size_t size = sizeof("伽")-1; // this char is 3 bytes long
//size_t size = sizeof("楘")-1; // this char is 3 bytes long
//XString str = "ギꇉ伽楘"_XS;
//char* s = str.data(42);
TEST_ALL_CLASSES(testchar32At, TEST_ALL_INTEGRAL);
TEST_ALL_CLASSES(testDefaultCtor, __TEST0);
TEST_ALL_CLASSES(testEmpty, __TEST0);
TEST_ALL_CLASSES(testTakeValueFrom, TEST_ALL_UTF);
TEST_ALL_CLASSES(testTakeValueFromXString, TEST_ALL_UTF);
TEST_ALL_CLASSES(testchar32At_u, TEST_ALL_INTEGRAL);
TEST_ALL_CLASSES(testchar32At, TEST_ALL_INTEGRAL);
TEST_ALL_CLASSES(testdataSized, TEST_ALL_INTEGRAL);
TEST_ALL_CLASSES(teststrcpy, TEST_ALL_UTF);
TEST_ALL_CLASSES(teststrncpy, TEST_ALL_UTF); // 26944 tests
@ -1337,7 +1391,7 @@ func_test(x3);
TEST_ALL_CLASSES(testSubString, __TEST0);
TEST_ALL_CLASSES(testCompare, TEST_ALL_UTF);
TEST_ALL_CLASSES(testIdxOf, TEST_ALL_UTF);
TEST_ALL_CLASSES(testindexOf, TEST_ALL_UTF);

2
rEFIt_UEFI/cpp_unit_test/XString_test.h Normal file → Executable file
View File

@ -1 +1 @@
int XStringx_tests();
int XString_tests();

13
rEFIt_UEFI/cpp_unit_test/all_tests.cpp Normal file → Executable file
View File

@ -31,20 +31,19 @@ bool all_tests()
bool all_ok = true;
int ret;
#ifdef XSTRING16_DEV
ret = XStringx_tests();
ret = XString_tests();
if ( ret != 0 ) {
DebugLog(2, "XString16_tests() failed at test %d\n", ret);
all_ok = false;
}
return ret;
//return ret;
// ret = XUINTN_tests();
// if ( ret != 0 ) {
// DebugLog(2, "XUINTN_tests() failed at test %d\n", ret);
// all_ok = false;
// }
#if defined(CLOVER_BUILD)
ret = printlib_tests();
#if defined(JIEF_DEBUG) && defined(CLOVER_BUILD)
ret = printlib_tests();
if ( ret != 0 ) {
DebugLog(2, "printlib_tests() failed at test %d\n", ret);
all_ok = false;
@ -55,16 +54,12 @@ return ret;
all_ok = false;
}
#endif
#endif
#ifndef _MSC_VER
ret = printf_lite_tests();
if ( ret != 0 ) {
DebugLog(2, "printf_lite_tests() failed at test %d\n", ret);
all_ok = false;
}
#endif
#ifdef JIEF_DEBUG
//return ret;
#endif
ret = strlen_tests();
if ( ret != 0 ) {

17
rEFIt_UEFI/cpp_unit_test/printf_lite-test.cpp Normal file → Executable file
View File

@ -395,11 +395,18 @@ int printf_lite_tests(void)
#if __x86_64__
#endif
size_t size;
if ( SIZE_T_MAX == UINT64_MAX ) {
size = SIZE_T_MAX; Test1arg(F("SIZE_MAX=18446744073709551615"), F("SIZE_MAX=%zu"), size);
}else if ( SIZE_T_MAX == UINT32_MAX ) {
size = SIZE_T_MAX; Test1arg(F("SIZE_MAX=4294967295"), F("SIZE_MAX=%zu"), size);
#ifdef SIZE_MAX
# define MY_SIZE_T_MAX SIZE_MAX
#elif defined(SIZE_T_MAX)
# define MY_SIZE_T_MAX SIZE_T_MAX
#elif
#warning No size_t max
#endif
size_t size;
if (MY_SIZE_T_MAX == UINT64_MAX ) {
size = MY_SIZE_T_MAX; Test1arg(F("SIZE_MAX=18446744073709551615"), F("SIZE_MAX=%zu"), size);
}else if (MY_SIZE_T_MAX == UINT32_MAX ) {
size = MY_SIZE_T_MAX; Test1arg(F("SIZE_MAX=4294967295"), F("SIZE_MAX=%zu"), size);
}else{
// 16 bits size_t ? Does that exist ?
}

View File

@ -131,7 +131,7 @@ XString AddLoadOption(IN CONST XString& LoadOptions, IN CONST XString& LoadOptio
}
// If there is no option or it is already present duplicate original
else {
if ( LoadOptions.ExistIn(LoadOption) ) return LoadOptions; //good
if ( LoadOptions.contains(LoadOption) ) return LoadOptions; //good
// Otherwise add option
// return SPrintf("%s %s", LoadOptions.c_str(), LoadOption.c_str()); //LoadOptions + LoadOption
return LoadOptions + " "_XS + LoadOption; //why not?
@ -150,7 +150,7 @@ XString RemoveLoadOption(IN const XString& LoadOptions, IN const XString& LoadOp
// If there is no option to remove then duplicate original
if (LoadOption.isEmpty()) return LoadOptions;
// If not present duplicate original
xsize Offset = LoadOptions.IdxOf(LoadOption);
xsize Offset = LoadOptions.indexOf(LoadOption);
if ( Offset == MAX_XSIZE ) return LoadOptions;
// Get placement of option in original options
@ -181,15 +181,15 @@ XString RemoveLoadOption(IN const XString& LoadOptions, IN const XString& LoadOp
XString NewLoadOptions;
if (Offset == 0) {
// Simple case - we just need substring after OptionLength position
NewLoadOptions = LoadOptions.SubString(OptionLength, MAX_XSIZE);
NewLoadOptions = LoadOptions.subString(OptionLength, MAX_XSIZE);
} else {
// Copy preceeding substring
NewLoadOptions = LoadOptions.SubString(0, Offset);
NewLoadOptions = LoadOptions.subString(0, Offset);
// CopyMem(NewLoadOptions, LoadOptions, Offset * sizeof(CHAR16));
if ((Offset + OptionLength) < Length) {
// Copy following substring, but include one space also
OptionLength--;
NewLoadOptions += LoadOptions.SubString(Offset + OptionLength, MAX_XSIZE);
NewLoadOptions += LoadOptions.subString(Offset + OptionLength, MAX_XSIZE);
// CopyMem(NewLoadOptions + Offset, LoadOptions + Offset + OptionLength, (Length - OptionLength - Offset) * sizeof(CHAR16));
}
}

View File

@ -251,7 +251,7 @@ UINT8 GetOSTypeFromPath(IN CONST CHAR16 *Path)
// (StriCmp(Path, L"\\bootmgr.efi") == 0) || //never worked, just extra icon in menu
(StriCmp(Path, L"\\EFI\\MICROSOFT\\BOOT\\cdboot.efi") == 0)) {
return OSTYPE_WINEFI;
} else if (LINUX_FULL_LOADER_PATH.EqualIC(Path)) {
} else if (LINUX_FULL_LOADER_PATH.equalIC(Path)) {
return OSTYPE_LINEFI;
} else if (StriStr(Path, L"grubx64.efi") != NULL) {
return OSTYPE_LINEFI;
@ -301,7 +301,7 @@ STATIC CONST CHAR16 *LinuxIconNameFromPath(IN CONST CHAR16 *Path,
}
// Try to open the linux issue
if ((RootDir != NULL) && LINUX_FULL_LOADER_PATH.EqualIC(Path)) {
if ((RootDir != NULL) && LINUX_FULL_LOADER_PATH.equalIC(Path)) {
CHAR8 *Issue = NULL;
UINTN IssueLen = 0;
if (!EFI_ERROR(egLoadFile(RootDir, LINUX_ISSUE_PATH.wc_str(), (UINT8 **)&Issue, &IssueLen)) && (Issue != NULL)) {
@ -605,7 +605,7 @@ STATIC LOADER_ENTRY *CreateLoaderEntry(IN CONST CHAR16 *LoaderPath,
case OSTYPE_OSX_INSTALLER:
OSIconName = GetOSIconName(Entry->OSVersion);// Sothor - Get OSIcon name using OSVersion
// apianti - force custom logo even when verbose
if ( Entry->LoadOptions.ExistInIC("-v") ) {
if ( Entry->LoadOptions.containsIC("-v") ) {
// OSX is not booting verbose, so we can set console to graphics mode
Entry->Flags = OSFLAG_UNSET(Entry->Flags, OSFLAG_USEGRAPHICS);
}
@ -891,8 +891,8 @@ STATIC VOID AddDefaultMenu(IN LOADER_ENTRY *Entry)
}
} else if (Entry->LoaderType == OSTYPE_LINEFI) {
BOOLEAN Quiet = Entry->LoadOptions.ExistIn("quiet");
BOOLEAN WithSplash = Entry->LoadOptions.ExistIn("splash");
BOOLEAN Quiet = Entry->LoadOptions.contains("quiet");
BOOLEAN WithSplash = Entry->LoadOptions.contains("splash");
// default entry
SubEntry = Entry->getPartiallyDuplicatedEntry();
@ -1233,7 +1233,7 @@ VOID ScanLoader(VOID)
if (aFound && (aFound == aIndex)) {
XImage ImageX;
XStringW IconXSW = XStringW().takeValueFrom(AndroidEntryData[Index].Icon);
ImageX.LoadXImage(ThemeX.ThemeDir, (L"os_"_XSW + IconXSW.SubString(0, IconXSW.IdxOf(','))).wc_str());
ImageX.LoadXImage(ThemeX.ThemeDir, (L"os_"_XSW + IconXSW.subString(0, IconXSW.indexOf(','))).wc_str());
AddLoaderEntry(AndroidEntryData[Index].Path, ""_XS, XStringW().takeValueFrom(AndroidEntryData[Index].Title), Volume,
(ImageX.isEmpty() ? NULL : &ImageX), OSTYPE_LIN, OSFLAG_NODEFAULTARGS);
}
@ -1273,7 +1273,7 @@ VOID ScanLoader(VOID)
if (FileExists(Volume->RootDir, LinuxEntryData[Index].Path)) {
XImage ImageX;
XStringW IconXSW = XStringW().takeValueFrom(LinuxEntryData[Index].Icon);
ImageX.LoadXImage(ThemeX.ThemeDir, (L"os_"_XSW + IconXSW.SubString(0, IconXSW.IdxOf(','))).wc_str());
ImageX.LoadXImage(ThemeX.ThemeDir, (L"os_"_XSW + IconXSW.subString(0, IconXSW.indexOf(','))).wc_str());
AddLoaderEntry(LinuxEntryData[Index].Path, ""_XS, XStringW().takeValueFrom(LinuxEntryData[Index].Title), Volume,
(ImageX.isEmpty() ? NULL : &ImageX), OSTYPE_LIN, OSFLAG_NODEFAULTARGS);
}

View File

@ -79,7 +79,7 @@ UINT32 EncodeOptions(const XString& Options)
return 0;
}
for (Index = 0; Index < NUM_OPT; Index++) {
if ( Options.ExistIn(ArgOptional[Index]) ) {
if ( Options.contains(ArgOptional[Index]) ) {
OptionsBits |= (1 << Index);
if (Index == 1) {
OptionsBits &= ~1;

View File

@ -91,11 +91,11 @@ EFI_STATUS XTheme::ParseSVGXIcon(INTN Id, const XString& IconNameX, XImage* Imag
// if (BootCampStyle && (strstr(IconName, "selection_big") != NULL)) {
// shape->opacity = 0.f;
// }
if (BootCampStyle && IconNameX.ExistIn("selection_big")) {
if (BootCampStyle && IconNameX.contains("selection_big")) {
shape->opacity = 0.f;
}
// if (strstr(shape->id, "BoundingRect") != NULL) {
if (XString().takeValueFrom(shape->id).ExistIn("BoundingRect")) {
if (XString().takeValueFrom(shape->id).contains("BoundingRect")) {
//there is bounds after nsvgParse()
IconImage->width = shape->bounds[2] - shape->bounds[0];
IconImage->height = shape->bounds[3] - shape->bounds[1];
@ -103,12 +103,12 @@ EFI_STATUS XTheme::ParseSVGXIcon(INTN Id, const XString& IconNameX, XImage* Imag
if ( IconImage->height < 1.f ) {
IconImage->height = 200.f;
}
if (IconNameX.ExistIn("selection_big") && (!SelectionOnTop)) {
if (IconNameX.contains("selection_big") && (!SelectionOnTop)) {
MainEntriesSize = (int)(IconImage->width * Scale); //xxx
row0TileSize = MainEntriesSize + (int)(16.f * Scale);
DBG("main entry size = %lld\n", MainEntriesSize);
}
if (IconNameX.ExistIn("selection_small") && (!SelectionOnTop)) {
if (IconNameX.contains("selection_small") && (!SelectionOnTop)) {
row1TileSize = (int)(IconImage->width * Scale);
}
@ -185,7 +185,7 @@ EFI_STATUS XTheme::ParseSVGXIcon(INTN Id, const XString& IconNameX, XImage* Imag
bounds[3] = -FLT_MAX;
nsvg__imageBounds(p2, bounds);
CopyMem(IconImage->realBounds, bounds, 4 * sizeof(float));
if ((Id == BUILTIN_ICON_BANNER) && IconNameX.ExistIn("Banner")) {
if ((Id == BUILTIN_ICON_BANNER) && IconNameX.contains("Banner")) {
BannerPosX = (int)(bounds[0] * Scale - CentreShift);
if (BannerPosX < 0) {
BannerPosX = 1; //one pixel
@ -211,7 +211,7 @@ EFI_STATUS XTheme::ParseSVGXIcon(INTN Id, const XString& IconNameX, XImage* Imag
float tx = 0.f, ty = 0.f;
if ((Id != BUILTIN_ICON_BACKGROUND) &&
(Id != BUILTIN_ICON_ANIME) &&
!IconNameX.ExistIn("Banner")) {
!IconNameX.contains("Banner")) {
float realWidth = (bounds[2] - bounds[0]) * Scale;
float realHeight = (bounds[3] - bounds[1]) * Scale;
// DBG("icon=%s width=%f realwidth=%f\n", IconNameX.c_str(), Width, realWidth);

View File

@ -395,26 +395,26 @@ const XImage& XTheme::LoadOSIcon(const XString& Full)
XString Second;
XString Third;
const XImage *ReturnImage;
UINTN Comma = Full.IdxOf(',');
UINTN Comma = Full.indexOf(',');
UINTN Size = Full.length();
// DBG("IconName=%ls comma=%lld size=%lld\n", OSIconName, Comma, Size);
if (Comma != MAX_XSIZE) { //Comma
First = "os_"_XS + Full.SubString(0, Comma);
First = "os_"_XS + Full.subString(0, Comma);
ReturnImage = &GetIcon(First);
// DBG(" first=%s\n", First.c_str());
if (!ReturnImage->isEmpty()) return *ReturnImage;
//else search second name
Second = "os_"_XS + Full.SubString(Comma + 1, Size - Comma - 1);
Second = "os_"_XS + Full.subString(Comma + 1, Size - Comma - 1);
//moreover names can be triple L"chrome,grub,linux"
UINTN SecondComma = Second.IdxOf(',');
UINTN SecondComma = Second.indexOf(',');
if (Comma == MAX_XSIZE) {
ReturnImage = &GetIcon(Second);
if (!ReturnImage->isEmpty()) return *ReturnImage;
} else {
First = Second.SubString(0, SecondComma);
First = Second.subString(0, SecondComma);
ReturnImage = &GetIcon(First);
if (!ReturnImage->isEmpty()) return *ReturnImage;
Third = "os_"_XS + Second.SubString(SecondComma + 1, Size - SecondComma - 1);
Third = "os_"_XS + Second.subString(SecondComma + 1, Size - SecondComma - 1);
ReturnImage = &GetIcon(Third);
if (!ReturnImage->isEmpty()) return *ReturnImage;
}

View File

@ -749,7 +749,7 @@ static VOID StartLoader(IN LOADER_ENTRY *Entry)
}
// Set boot argument for kernel if no caches, this should force kernel loading
if ( OSFLAG_ISSET(Entry->Flags, OSFLAG_NOCACHES) && !Entry->LoadOptions.ExistInIC("Kernel="_XS) ) {
if ( OSFLAG_ISSET(Entry->Flags, OSFLAG_NOCACHES) && !Entry->LoadOptions.containsIC("Kernel="_XS) ) {
XString KernelLocation;
if (Entry->OSVersion && AsciiOSVersionToUint64(Entry->OSVersion) <= AsciiOSVersionToUint64("10.9")) {
@ -802,7 +802,7 @@ static VOID StartLoader(IN LOADER_ENTRY *Entry)
if ( gDriversFlags.AptioFixLoaded &&
!DoHibernateWake &&
!Entry->LoadOptions.ExistIn("slide=") ) {
!Entry->LoadOptions.contains("slide=") ) {
// Add slide=0 argument for ML+ if not present
Entry->LoadOptions = AddLoadOption(Entry->LoadOptions, "slide=0"_XS);
}
@ -816,7 +816,7 @@ static VOID StartLoader(IN LOADER_ENTRY *Entry)
(AsciiStrStr(gCPUStructure.BrandString, "Celeron") || AsciiStrStr(gCPUStructure.BrandString, "Pentium")) &&
(AsciiOSVersionToUint64(Entry->OSVersion) >= AsciiOSVersionToUint64("10.8.5")) &&
(AsciiOSVersionToUint64(Entry->OSVersion) < AsciiOSVersionToUint64("10.12")) &&
(!Entry->LoadOptions.ExistIn("-xcpm"_XS))) {
(!Entry->LoadOptions.contains("-xcpm"_XS))) {
// add "-xcpm" argv if not present on Haswell+ Celeron/Pentium
Entry->LoadOptions = AddLoadOption(Entry->LoadOptions, "-xcpm"_XS);
}
@ -826,7 +826,7 @@ static VOID StartLoader(IN LOADER_ENTRY *Entry)
gCPUStructure.Model == CPU_MODEL_IVY_BRIDGE &&
(AsciiOSVersionToUint64(Entry->OSVersion) >= AsciiOSVersionToUint64("10.8.5")) &&
(AsciiOSVersionToUint64(Entry->OSVersion) < AsciiOSVersionToUint64("10.12")) &&
(!Entry->LoadOptions.ExistIn("-xcpm"))) {
(!Entry->LoadOptions.contains("-xcpm"))) {
// add "-xcpm" argv if not present on Ivy Bridge
Entry->LoadOptions = AddLoadOption(Entry->LoadOptions, "-xcpm"_XS);
}
@ -848,7 +848,7 @@ static VOID StartLoader(IN LOADER_ENTRY *Entry)
// which is wrong
// apianti - only block console output if using graphics
// but don't block custom boot logo
if ( Entry->LoadOptions.ExistInIC("-v"_XS) ) {
if ( Entry->LoadOptions.containsIC("-v"_XS) ) {
Entry->Flags = OSFLAG_UNSET(Entry->Flags, OSFLAG_USEGRAPHICS);
} else if ( Entry->LoadOptions.isEmpty() ) {
Entry->LoadOptions = AddLoadOption(Entry->LoadOptions, " "_XS);
@ -2718,7 +2718,7 @@ RefitMain (IN EFI_HANDLE ImageHandle,
gEmuVariableControl->UninstallEmulation(gEmuVariableControl);
}
*/
if ( LoaderEntry->LoadOptions.ExistIn("BO-ADD") ) {
if ( LoaderEntry->LoadOptions.contains("BO-ADD") ) {
CHAR16 *Description;
CONST CHAR16 *VolName;
CONST CHAR16 *LoaderName;
@ -2787,13 +2787,13 @@ RefitMain (IN EFI_HANDLE ImageHandle,
PrintBootOptions(FALSE);
} else if ( LoaderEntry->LoadOptions.ExistIn("BO-REMOVE") ) {
} else if ( LoaderEntry->LoadOptions.contains("BO-REMOVE") ) {
PrintBootOptions(FALSE);
Status = DeleteBootOptionForFile (LoaderEntry->Volume->DeviceHandle,
LoaderEntry->LoaderPath
);
PrintBootOptions(FALSE);
} else if ( LoaderEntry->LoadOptions.ExistIn("BO-PRINT") ) {
} else if ( LoaderEntry->LoadOptions.contains("BO-PRINT") ) {
PrintBootOptions(TRUE);
}