Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/Common/MyString.h')
-rwxr-xr-xCPP/Common/MyString.h138
1 files changed, 61 insertions, 77 deletions
diff --git a/CPP/Common/MyString.h b/CPP/Common/MyString.h
index eb3c52dc..0312bac6 100755
--- a/CPP/Common/MyString.h
+++ b/CPP/Common/MyString.h
@@ -5,6 +5,7 @@
#include <string.h>
+#include "Types.h"
#include "MyVector.h"
template <class T>
@@ -16,13 +17,14 @@ inline int MyStringLen(const T *s)
}
template <class T>
-inline T * MyStringCopy(T *dest, const T *src)
+inline void MyStringCopy(T *dest, const T *src)
{
- T *destStart = dest;
while ((*dest++ = *src++) != 0);
- return destStart;
}
+int FindCharPosInString(const char *s, char c);
+int FindCharPosInString(const wchar_t *s, wchar_t c);
+
inline wchar_t* MyStringGetNextCharPointer(wchar_t *p)
{ return (p + 1); }
inline const wchar_t* MyStringGetNextCharPointer(const wchar_t *p)
@@ -32,77 +34,25 @@ inline wchar_t* MyStringGetPrevCharPointer(const wchar_t *, wchar_t *p)
inline const wchar_t* MyStringGetPrevCharPointer(const wchar_t *, const wchar_t *p)
{ return (p - 1); }
-#ifdef _WIN32
-
-inline const char* MyStringGetNextCharPointer(const char *p)
-{
- #ifdef UNDER_CE
- return p + 1;
- #else
- return CharNextA(p);
- #endif
-}
-
-inline const char* MyStringGetPrevCharPointer(const char *base, const char *p)
- { return CharPrevA(base, p); }
-
-inline char MyCharUpper(char c)
- { return (char)(unsigned int)(UINT_PTR)CharUpperA((LPSTR)(UINT_PTR)(unsigned int)(unsigned char)c); }
-#ifdef _UNICODE
-inline wchar_t MyCharUpper(wchar_t c)
- { return (wchar_t)(unsigned int)(UINT_PTR)CharUpperW((LPWSTR)(UINT_PTR)(unsigned int)c); }
-#else
wchar_t MyCharUpper(wchar_t c);
-#endif
+// wchar_t MyCharLower(wchar_t c);
-#ifdef _UNICODE
-inline wchar_t MyCharLower(wchar_t c)
- { return (wchar_t)(unsigned int)(UINT_PTR)CharLowerW((LPWSTR)(UINT_PTR)(unsigned int)c); }
-#else
-wchar_t MyCharLower(wchar_t c);
-#endif
+char *MyStringUpper(char *s);
+char *MyStringLower(char *s);
-inline char MyCharLower(char c)
-#ifdef UNDER_CE
- { return (char)MyCharLower((wchar_t)c); }
-#else
- { return (char)(unsigned int)(UINT_PTR)CharLowerA((LPSTR)(UINT_PTR)(unsigned int)(unsigned char)c); }
-#endif
+wchar_t *MyStringUpper(wchar_t *s);
+wchar_t *MyStringLower(wchar_t *s);
-inline char * MyStringUpper(char *s) { return CharUpperA(s); }
-#ifdef _UNICODE
-inline wchar_t * MyStringUpper(wchar_t *s) { return CharUpperW(s); }
-#else
-wchar_t * MyStringUpper(wchar_t *s);
-#endif
-
-inline char * MyStringLower(char *s) { return CharLowerA(s); }
-#ifdef _UNICODE
-inline wchar_t * MyStringLower(wchar_t *s) { return CharLowerW(s); }
-#else
-wchar_t * MyStringLower(wchar_t *s);
-#endif
-
-#else // Standard-C
-wchar_t MyCharUpper(wchar_t c);
-#endif
+const char* MyStringGetNextCharPointer(const char *p);
+const char* MyStringGetPrevCharPointer(const char *base, const char *p);
//////////////////////////////////////
// Compare
-/*
-#ifndef UNDER_CE
-int MyStringCollate(const char *s1, const char *s2);
-int MyStringCollateNoCase(const char *s1, const char *s2);
-#endif
-int MyStringCollate(const wchar_t *s1, const wchar_t *s2);
-int MyStringCollateNoCase(const wchar_t *s1, const wchar_t *s2);
-*/
-
int MyStringCompare(const char *s1, const char *s2);
int MyStringCompare(const wchar_t *s1, const wchar_t *s2);
-// int MyStringCompareNoCase(const char *s1, const char *s2);
+int MyStringCompareNoCase(const char *s1, const char *s2);
int MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2);
template <class T>
@@ -338,10 +288,8 @@ public:
return Mid(_length - count, count);
}
- void MakeUpper()
- { MyStringUpper(_chars); }
- void MakeLower()
- { MyStringLower(_chars); }
+ void MakeUpper() { MyStringUpper(_chars); }
+ void MakeLower() { MyStringLower(_chars); }
int Compare(const CStringBase& s) const
{ return MyStringCompare(_chars, s._chars); }
@@ -362,18 +310,11 @@ public:
{ return MyStringCollateNoCase(_chars, s._chars); }
*/
- int Find(T c) const { return Find(c, 0); }
+ int Find(T c) const { return FindCharPosInString(_chars, c); }
int Find(T c, int startIndex) const
{
- const T *p = _chars + startIndex;
- for (;;)
- {
- if (*p == c)
- return (int)(p - _chars);
- if (*p == 0)
- return -1;
- p = GetNextCharPointer(p);
- }
+ int pos = FindCharPosInString(_chars + startIndex, c);
+ return pos < 0 ? -1 : pos + startIndex;
}
int Find(const CStringBase &s) const { return Find(s, 0); }
int Find(const CStringBase &s, int startIndex) const
@@ -622,4 +563,47 @@ typedef CObjectVector<UString> UStringVector;
typedef CObjectVector<CSysString> CSysStringVector;
+
+// ---------- FString ----------
+
+#ifdef _WIN32
+ #define USE_UNICODE_FSTRING
+#endif
+
+#ifdef USE_UNICODE_FSTRING
+
+ #define __FTEXT(quote) L##quote
+
+ typedef wchar_t FChar;
+ typedef UString FString;
+
+ #define fs2us(_x_) (_x_)
+ #define us2fs(_x_) (_x_)
+ FString fas2fs(const AString &s);
+ AString fs2fas(const FChar *s);
+
+#else
+
+ #define __FTEXT(quote) quote
+
+ typedef char FChar;
+ typedef AString FString;
+
+ UString fs2us(const FString &s);
+ FString us2fs(const wchar_t *s);
+ #define fas2fs(_x_) (_x_)
+ #define fs2fas(_x_) (_x_)
+
+#endif
+
+#define FTEXT(quote) __FTEXT(quote)
+
+#define FCHAR_PATH_SEPARATOR FTEXT(CHAR_PATH_SEPARATOR)
+#define FSTRING_PATH_SEPARATOR FTEXT(STRING_PATH_SEPARATOR)
+#define FCHAR_ANY_MASK FTEXT('*')
+#define FSTRING_ANY_MASK FTEXT("*")
+typedef const FChar *CFSTR;
+
+typedef CObjectVector<FString> FStringVector;
+
#endif