Browse Source

Fix CarlaString for effc++

tags/1.9.4
falkTX 10 years ago
parent
commit
91cc7af953
1 changed files with 33 additions and 27 deletions
  1. +33
    -27
      source/utils/CarlaString.hpp

+ 33
- 27
source/utils/CarlaString.hpp View File

@@ -40,20 +40,20 @@ public:
* Empty string.
*/
explicit CarlaString() noexcept
{
_init();
}
: fBuffer(_null()),
fBufferLen(0) {}

/*
* Simple character.
*/
explicit CarlaString(const char c) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char ch[2];
ch[0] = c;
ch[1] = '\0';

_init();
_dup(ch);
}

@@ -61,8 +61,9 @@ public:
* Simple char string.
*/
explicit CarlaString(char* const strBuf) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
_init();
_dup(strBuf);
}

@@ -70,8 +71,9 @@ public:
* Simple const char string.
*/
explicit CarlaString(const char* const strBuf) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
_init();
_dup(strBuf);
}

@@ -79,12 +81,13 @@ public:
* Integer.
*/
explicit CarlaString(const int value) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, "%d", value);
strBuf[0xff] = '\0';

_init();
_dup(strBuf);
}

@@ -92,12 +95,13 @@ public:
* Unsigned integer, possibly in hexadecimal.
*/
explicit CarlaString(const unsigned int value, const bool hexadecimal = false) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, hexadecimal ? "0x%x" : "%u", value);
strBuf[0xff] = '\0';

_init();
_dup(strBuf);
}

@@ -105,12 +109,13 @@ public:
* Long integer.
*/
explicit CarlaString(const long value) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, "%ld", value);
strBuf[0xff] = '\0';

_init();
_dup(strBuf);
}

@@ -118,12 +123,13 @@ public:
* Long unsigned integer, possibly hexadecimal.
*/
explicit CarlaString(const unsigned long value, const bool hexadecimal = false) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, hexadecimal ? "0x%lx" : "%lu", value);
strBuf[0xff] = '\0';

_init();
_dup(strBuf);
}

@@ -131,12 +137,13 @@ public:
* Long long integer.
*/
explicit CarlaString(const long long value) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, "%lld", value);
strBuf[0xff] = '\0';

_init();
_dup(strBuf);
}

@@ -144,12 +151,13 @@ public:
* Long long unsigned integer, possibly hexadecimal.
*/
explicit CarlaString(const unsigned long long value, const bool hexadecimal = false) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, hexadecimal ? "0x%llx" : "%llu", value);
strBuf[0xff] = '\0';

_init();
_dup(strBuf);
}

@@ -157,12 +165,13 @@ public:
* Single-precision floating point number.
*/
explicit CarlaString(const float value) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, "%f", value);
strBuf[0xff] = '\0';

_init();
_dup(strBuf);
}

@@ -170,12 +179,13 @@ public:
* Double-precision floating point number.
*/
explicit CarlaString(const double value) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
char strBuf[0xff+1];
std::snprintf(strBuf, 0xff, "%g", value);
strBuf[0xff] = '\0';

_init();
_dup(strBuf);
}

@@ -186,8 +196,9 @@ public:
* Create string from another string.
*/
CarlaString(const CarlaString& str) noexcept
: fBuffer(_null()),
fBufferLen(0)
{
_init();
_dup(str.fBuffer);
}

@@ -750,16 +761,6 @@ private:
return &sNull;
}

/*
* Shared init function.
* Called on all constructors.
*/
void _init() noexcept
{
fBuffer = _null();
fBufferLen = 0;
}

/*
* Helper function.
* Called whenever the string needs to be allocated.
@@ -783,7 +784,11 @@ private:
fBuffer = (char*)std::malloc(fBufferLen+1);

if (fBuffer == nullptr)
return _init();
{
fBuffer = _null();
fBufferLen = 0;
return;
}

std::strcpy(fBuffer, strBuf);

@@ -800,7 +805,8 @@ private:
CARLA_SAFE_ASSERT(fBuffer != nullptr);
std::free(fBuffer);

_init();
fBuffer = _null();
fBufferLen = 0;
}
}



Loading…
Cancel
Save