Added repetition constructors

Former-commit-id: ee33ef8aa01ec14a89f47b3581f86cfe499299b8
This commit is contained in:
Lynix 2014-03-06 09:24:38 +01:00
parent 24be314b86
commit ef9592a0fd
2 changed files with 92 additions and 17 deletions

View File

@ -33,7 +33,10 @@ class NAZARA_API NzString : public NzHashable
NzString(); NzString();
explicit NzString(char character); explicit NzString(char character);
explicit NzString(unsigned int length, char character); NzString(unsigned int rep, char character);
NzString(unsigned int rep, const char* string);
NzString(unsigned int rep, const char* string, unsigned int length);
NzString(unsigned int rep, const NzString& string);
NzString(const char* string); NzString(const char* string);
NzString(const char* string, unsigned int length); NzString(const char* string, unsigned int length);
NzString(const std::string& string); NzString(const std::string& string);
@ -125,7 +128,10 @@ class NAZARA_API NzString : public NzHashable
NzString Reversed() const; NzString Reversed() const;
NzString& Set(char character); NzString& Set(char character);
NzString& Set(unsigned int length, char character); NzString& Set(unsigned int rep, char character);
NzString& Set(unsigned int rep, const char* string);
NzString& Set(unsigned int rep, const char* string, unsigned int length);
NzString& Set(unsigned int rep, const NzString& string);
NzString& Set(const char* string); NzString& Set(const char* string);
NzString& Set(const char* string, unsigned int length); NzString& Set(const char* string, unsigned int length);
NzString& Set(const std::string& string); NzString& Set(const std::string& string);

View File

@ -90,24 +90,54 @@ NzString::NzString(char character)
m_sharedString = &emptyString; m_sharedString = &emptyString;
} }
NzString::NzString(unsigned int length, char character) NzString::NzString(unsigned int rep, char character)
{ {
if (length > 0) if (rep > 0)
{ {
m_sharedString = new SharedString; m_sharedString = new SharedString;
m_sharedString->capacity = length; m_sharedString->capacity = rep;
m_sharedString->size = length; m_sharedString->size = rep;
m_sharedString->string = new char[length+1]; m_sharedString->string = new char[rep+1];
if (character != '\0') if (character != '\0')
std::memset(m_sharedString->string, character, length); std::memset(m_sharedString->string, character, rep);
m_sharedString->string[length] = '\0'; m_sharedString->string[rep] = '\0';
} }
else else
m_sharedString = &emptyString; m_sharedString = &emptyString;
} }
NzString::NzString(unsigned int rep, const char* string) :
NzString(rep, string, (string) ? std::strlen(string) : 0)
{
}
NzString::NzString(unsigned int rep, const char* string, unsigned int length)
{
unsigned int totalSize = rep*length;
if (totalSize > 0)
{
m_sharedString = new SharedString;
m_sharedString->capacity = totalSize;
m_sharedString->size = totalSize;
m_sharedString->string = new char[totalSize+1];
for (unsigned int i = 0; i < rep; ++i)
std::memcpy(&m_sharedString->string[i*length], string, length);
m_sharedString->string[totalSize] = '\0';
}
else
m_sharedString = &emptyString;
}
NzString::NzString(unsigned int rep, const NzString& string) :
NzString(rep, string.m_sharedString->string, string.m_sharedString->size)
{
}
NzString::NzString(const char* string) : NzString::NzString(const char* string) :
NzString(string, (string) ? std::strlen(string) : 0) NzString(string, (string) ? std::strlen(string) : 0)
{ {
@ -2655,26 +2685,26 @@ NzString& NzString::Set(char character)
return *this; return *this;
} }
NzString& NzString::Set(unsigned int length, char character) NzString& NzString::Set(unsigned int rep, char character)
{ {
if (length > 0) if (rep > 0)
{ {
if (m_sharedString->capacity >= length) if (m_sharedString->capacity >= rep)
EnsureOwnership(true); EnsureOwnership(true);
else else
{ {
ReleaseString(); ReleaseString();
m_sharedString = new SharedString; m_sharedString = new SharedString;
m_sharedString->capacity = length; m_sharedString->capacity = rep;
m_sharedString->string = new char[length+1]; m_sharedString->string = new char[rep+1];
} }
m_sharedString->size = length; m_sharedString->size = rep;
if (character != '\0') if (character != '\0')
std::memset(m_sharedString->string, character, length); std::memset(m_sharedString->string, character, rep);
m_sharedString->string[length] = '\0'; m_sharedString->string[rep] = '\0';
} }
else else
ReleaseString(); ReleaseString();
@ -2682,6 +2712,45 @@ NzString& NzString::Set(unsigned int length, char character)
return *this; return *this;
} }
NzString& NzString::Set(unsigned int rep, const char* string)
{
return Set(rep, string, (string) ? std::strlen(string) : 0);
}
NzString& NzString::Set(unsigned int rep, const char* string, unsigned int length)
{
unsigned int totalSize = rep*length;
if (totalSize > 0)
{
if (m_sharedString->capacity >= totalSize)
EnsureOwnership(true);
else
{
ReleaseString();
m_sharedString = new SharedString;
m_sharedString->capacity = totalSize;
m_sharedString->string = new char[totalSize+1];
}
m_sharedString->size = totalSize;
for (unsigned int i = 0; i < rep; ++i)
std::memcpy(&m_sharedString->string[i*length], string, length);
m_sharedString->string[totalSize] = '\0';
}
else
ReleaseString();
return *this;
}
NzString& NzString::Set(unsigned int rep, const NzString& string)
{
return Set(rep, string.m_sharedString->string, string.m_sharedString->size);
}
NzString& NzString::Set(const char* string) NzString& NzString::Set(const char* string)
{ {
return Set(string, (string) ? std::strlen(string) : 0); return Set(string, (string) ? std::strlen(string) : 0);