Ai
1 Star 0 Fork 0

linuxmail/unrar-nonfree

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
strlist.cpp 2.28 KB
一键复制 编辑 原始数据 按行查看 历史
Norbert Preining 提交于 2018-10-24 17:44 +08:00 . Import Upstream version 5.2.7
#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
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/linuxmail/unrar-nonfree.git
git@gitee.com:linuxmail/unrar-nonfree.git
linuxmail
unrar-nonfree
unrar-nonfree
master

搜索帮助