旧的恢复MergeFilename,新的Combine重写并测试
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include<hgl/type/StringList.h>
|
||||
#include<hgl/math/PrimaryMathematics.h>
|
||||
#include<initializer_list>
|
||||
|
||||
/**
|
||||
* Maximum Path Length Limitation
|
||||
@@ -73,21 +74,17 @@ namespace hgl
|
||||
return String<T>::newOf(fullname,p-fullname);
|
||||
}
|
||||
|
||||
template<typename T,typename ...ARGS>
|
||||
inline const String<T> Combine(const T spear_char,const T *str1,ARGS...args)
|
||||
template<typename T>
|
||||
inline const String<T> CombineFilename(const T spear_char,const std::initializer_list<const T *> &args)
|
||||
{
|
||||
const int count=sizeof...(ARGS);
|
||||
if(args.size()<=0)
|
||||
return String<T>();
|
||||
|
||||
if(count<=0)
|
||||
return String<T>(str1);
|
||||
|
||||
int total_len=hgl::strlen(str1);
|
||||
AutoDeleteArray<int> str_len[count+1];
|
||||
|
||||
str_len[0]=total_len;
|
||||
int total=0;
|
||||
AutoDeleteArray<int> str_len(args.size());
|
||||
|
||||
{
|
||||
int index=1;
|
||||
int index=0;
|
||||
for(const T *str:args)
|
||||
{
|
||||
str_len[index]=hgl::strlen(str);
|
||||
@@ -99,56 +96,48 @@ namespace hgl
|
||||
T *fullname=new T[total];
|
||||
T *p=fullname;
|
||||
|
||||
hgl_cpy<T>(p,str1,str_len[0]);
|
||||
p+=str_len[0];
|
||||
|
||||
{
|
||||
int index=1;
|
||||
int index=0;
|
||||
for(const T *str:args)
|
||||
{
|
||||
hgl_cpy<T>(p,str,str_len[index]);
|
||||
p+=(int)str_len[index];
|
||||
*p=spear_char;
|
||||
++p;
|
||||
hgl_cpy<T>(p,str,str_len[index])
|
||||
p+=str_len[index];
|
||||
}
|
||||
|
||||
fullename[total-1]=0;
|
||||
fullname[total-1]=0;
|
||||
}
|
||||
|
||||
return String<T>::newOf(fullname,total-1);
|
||||
}
|
||||
|
||||
template<typename ...ARGS>
|
||||
inline const String<char> Combine(const char *str1,ARGS...args)
|
||||
inline const String<char> Combine(const std::initializer_list<const char *> &args)
|
||||
{
|
||||
return Combine<char>(HGL_DIRECTORY_SEPARATOR_RAWCHAR,str1,args...);
|
||||
return CombineFilename<char>(HGL_DIRECTORY_SEPARATOR_RAWCHAR,args);
|
||||
}
|
||||
|
||||
#ifdef HGL_SUPPORT_CHAR8_T
|
||||
template<typename ...ARGS>
|
||||
inline const String<char8_t> Combine(const char8_t *str1,ARGS...args)
|
||||
inline const String<char8_t> Combine(const std::initializer_list<const char8_t *> &args)
|
||||
{
|
||||
return Combine<char8_t>(HGL_DIRECTORY_SEPARATOR_U8CHAR,str1,args...);
|
||||
return CombineFilename<char8_t>(HGL_DIRECTORY_SEPARATOR_U8CHAR,args);
|
||||
}
|
||||
#endif//HGL_SUPPORT_CHAR8_T
|
||||
|
||||
#if HGL_OS == HGL_OS_Windows
|
||||
template<typename ...ARGS>
|
||||
inline const String<wchar_t> Combine(const wchar_t *str1,ARGS...args)
|
||||
inline const String<wchar_t> Combine(const std::initializer_list<const wchar_t *> &args)
|
||||
{
|
||||
return Combine<wchar_t>(HGL_DIRECTORY_SEPARATOR_WCHAR,str1,args...);
|
||||
return CombineFilename<wchar_t>(HGL_DIRECTORY_SEPARATOR_WCHAR,args);
|
||||
}
|
||||
#endif//HGL_OS == HGL_OS_Windows
|
||||
|
||||
template<typename T,typename ...ARGS>
|
||||
inline const String<T> Combine(const T spear_char,const String<T> &str1,ARGS...args)
|
||||
template<typename T>
|
||||
inline const String<T> CombineFilename(const T spear_char,const std::initializer_list<const String<T>> &args)
|
||||
{
|
||||
const int count=sizeof...(ARGS);
|
||||
if(args.size()<=0)
|
||||
return String<T>();
|
||||
|
||||
if(count<=0)
|
||||
return str1;
|
||||
|
||||
int total_len=str1.Length()
|
||||
int total=0;
|
||||
|
||||
for(const String<T> &str:args)
|
||||
total+=str.Length()+1;
|
||||
@@ -156,44 +145,37 @@ namespace hgl
|
||||
T *fullname=new T[total];
|
||||
T *p=fullname;
|
||||
|
||||
hgl_cpy<T>(p,str1.c_str(),str1.Length());
|
||||
p+=str1.Length();
|
||||
|
||||
{
|
||||
int index=1;
|
||||
for(const String<T> &str:args)
|
||||
{
|
||||
hgl_cpy<T>(p,str.c_str(),str.Length());
|
||||
p+=str.Length();
|
||||
*p=spear_char;
|
||||
++p;
|
||||
hgl_cpy<T>(p,str.c_str(),str.Length())
|
||||
p+=str1.Length();
|
||||
}
|
||||
|
||||
fullename[total-1]=0;
|
||||
fullname[total-1]=0;
|
||||
}
|
||||
|
||||
return String<T>::newOf(fullname,total-1);
|
||||
}
|
||||
|
||||
template<typename ...ARGS>
|
||||
inline const String<char> Combine(const String<char> &str1,ARGS...args)
|
||||
inline const String<char> Combine(const std::initializer_list<const String<char>> &args)
|
||||
{
|
||||
return Combine<char>(HGL_DIRECTORY_SEPARATOR_RAWCHAR,str1,args...);
|
||||
return CombineFilename<char>(HGL_DIRECTORY_SEPARATOR_RAWCHAR,args);
|
||||
}
|
||||
|
||||
#ifdef HGL_SUPPORT_CHAR8_T
|
||||
template<typename ...ARGS>
|
||||
inline const String<char8_t> Combine(const String<char8_t> &str1,ARGS...args)
|
||||
inline const String<char8_t> Combine(const std::initializer_list<const String<char8_t>> &args)
|
||||
{
|
||||
return Combine<char8_t>(HGL_DIRECTORY_SEPARATOR_U8CHAR,str1,args...);
|
||||
return CombineFilename<char8_t>(HGL_DIRECTORY_SEPARATOR_U8CHAR,args);
|
||||
}
|
||||
#endif//HGL_SUPPORT_CHAR8_T
|
||||
|
||||
#if HGL_OS == HGL_OS_Windows
|
||||
template<typename ...ARGS>
|
||||
inline const String<wchar_t> Combine(const String<wchar_t> &str1,ARGS...args)
|
||||
inline const String<wchar_t> Combine(const std::initializer_list<const String<wchar_t>> &args)
|
||||
{
|
||||
return Combine<wchar_t>(HGL_DIRECTORY_SEPARATOR_WCHAR,str1,args...);
|
||||
return CombineFilename<wchar_t>(HGL_DIRECTORY_SEPARATOR_WCHAR,args);
|
||||
}
|
||||
#endif//HGL_OS == HGL_OS_Windows
|
||||
|
||||
@@ -248,7 +230,7 @@ namespace hgl
|
||||
* 根据路径名和文件名
|
||||
*/
|
||||
template<typename T>
|
||||
inline String<T> Combine(const String<T> &pathname,const String<T> &filename,const T directory_separator_char,const T *directory_separator_str)
|
||||
inline String<T> MergeFilename(const String<T> &pathname,const String<T> &filename,const T directory_separator_char,const T *directory_separator_str)
|
||||
{
|
||||
String<T> fullname;
|
||||
|
||||
@@ -493,16 +475,16 @@ namespace hgl
|
||||
}
|
||||
|
||||
#ifdef HGL_SUPPORT_CHAR8_T
|
||||
inline AnsiString Combine(const AnsiString &pathname,const AnsiString &filename) ///<组合路径名与文件名
|
||||
{return Combine<char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_RAWSTR);}
|
||||
inline AnsiString MergeFilename(const AnsiString &pathname,const AnsiString &filename) ///<组合路径名与文件名
|
||||
{return MergeFilename<char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_RAWSTR);}
|
||||
#endif//HGL_SUPPORT_CHAR8_T
|
||||
|
||||
inline U8String Combine(const U8String &pathname,const U8String &filename) ///<组合路径名与文件名
|
||||
{return Combine<u8char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_U8STR);}
|
||||
inline U8String MergeFilename(const U8String &pathname,const U8String &filename) ///<组合路径名与文件名
|
||||
{return MergeFilename<u8char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_U8STR);}
|
||||
|
||||
#if HGL_OS == HGL_OS_Windows
|
||||
inline WString Combine(const WString &pathname,const WString &filename) ///<组合路径名与文件名
|
||||
{return Combine<wchar_t>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_STR);}
|
||||
inline WString MergeFilename(const WString &pathname,const WString &filename) ///<组合路径名与文件名
|
||||
{return MergeFilename<wchar_t>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_STR);}
|
||||
#endif//HGL_OS == HGL_OS_Windows
|
||||
|
||||
OSString FixFilename(const OSString &filename); ///<修正部分文件名问题
|
||||
|
Reference in New Issue
Block a user