Initial community commit
This commit is contained in:
151
Src/external_dependencies/openmpt-trunk/include/unrar/strlist.cpp
vendored
Normal file
151
Src/external_dependencies/openmpt-trunk/include/unrar/strlist.cpp
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
#include "rar.hpp"
|
||||
|
||||
StringList::StringList()
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
|
||||
|
||||
void StringList::Reset()
|
||||
{
|
||||
Rewind();
|
||||
StringData.Reset();
|
||||
StringsCount=0;
|
||||
SavePosNumber=0;
|
||||
}
|
||||
|
||||
|
||||
void StringList::AddStringA(const char *Str)
|
||||
{
|
||||
Array<wchar> StrW(strlen(Str));
|
||||
CharToWide(Str,&StrW[0],StrW.Size());
|
||||
AddString(&StrW[0]);
|
||||
}
|
||||
|
||||
|
||||
void StringList::AddString(const wchar *Str)
|
||||
{
|
||||
if (Str==NULL)
|
||||
Str=L"";
|
||||
|
||||
size_t PrevSize=StringData.Size();
|
||||
StringData.Add(wcslen(Str)+1);
|
||||
wcscpy(&StringData[PrevSize],Str);
|
||||
|
||||
StringsCount++;
|
||||
}
|
||||
|
||||
|
||||
bool StringList::GetStringA(char *Str,size_t MaxLength)
|
||||
{
|
||||
Array<wchar> StrW(MaxLength);
|
||||
if (!GetString(&StrW[0],StrW.Size()))
|
||||
return false;
|
||||
WideToChar(&StrW[0],Str,MaxLength);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool StringList::GetString(wchar *Str,size_t MaxLength)
|
||||
{
|
||||
wchar *StrPtr;
|
||||
if (!GetString(&StrPtr))
|
||||
return false;
|
||||
wcsncpyz(Str,StrPtr,MaxLength);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
#ifndef SFX_MODULE
|
||||
bool StringList::GetString(wchar *Str,size_t MaxLength,int StringNum)
|
||||
{
|
||||
SavePosition();
|
||||
Rewind();
|
||||
bool RetCode=true;
|
||||
while (StringNum-- >=0)
|
||||
if (!GetString(Str,MaxLength))
|
||||
{
|
||||
RetCode=false;
|
||||
break;
|
||||
}
|
||||
RestorePosition();
|
||||
return RetCode;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
wchar* StringList::GetString()
|
||||
{
|
||||
wchar *Str;
|
||||
GetString(&Str);
|
||||
return Str;
|
||||
}
|
||||
|
||||
|
||||
bool StringList::GetString(wchar **Str)
|
||||
{
|
||||
if (CurPos>=StringData.Size()) // No more strings left unprocessed.
|
||||
{
|
||||
if (Str!=NULL)
|
||||
*Str=NULL;
|
||||
return false;
|
||||
}
|
||||
|
||||
wchar *CurStr=&StringData[CurPos];
|
||||
CurPos+=wcslen(CurStr)+1;
|
||||
if (Str!=NULL)
|
||||
*Str=CurStr;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void StringList::Rewind()
|
||||
{
|
||||
CurPos=0;
|
||||
}
|
||||
|
||||
|
||||
#ifndef SFX_MODULE
|
||||
bool StringList::Search(const wchar *Str,bool CaseSensitive)
|
||||
{
|
||||
SavePosition();
|
||||
Rewind();
|
||||
bool Found=false;
|
||||
wchar *CurStr;
|
||||
while (GetString(&CurStr))
|
||||
{
|
||||
if (Str!=NULL && CurStr!=NULL)
|
||||
if ((CaseSensitive ? wcscmp(Str,CurStr):wcsicomp(Str,CurStr))!=0)
|
||||
continue;
|
||||
Found=true;
|
||||
break;
|
||||
}
|
||||
RestorePosition();
|
||||
return Found;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef SFX_MODULE
|
||||
void StringList::SavePosition()
|
||||
{
|
||||
if (SavePosNumber<ASIZE(SaveCurPos))
|
||||
{
|
||||
SaveCurPos[SavePosNumber]=CurPos;
|
||||
SavePosNumber++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef SFX_MODULE
|
||||
void StringList::RestorePosition()
|
||||
{
|
||||
if (SavePosNumber>0)
|
||||
{
|
||||
SavePosNumber--;
|
||||
CurPos=SaveCurPos[SavePosNumber];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user