Browse Source

Hid an internal string constructor to make the type cleaner.

David Piuva 5 years ago
parent
commit
0534a3e8e4
2 changed files with 11 additions and 8 deletions
  1. 11 5
      Source/DFPSR/base/text.cpp
  2. 0 3
      Source/DFPSR/base/text.h

+ 11 - 5
Source/DFPSR/base/text.cpp

@@ -650,12 +650,18 @@ DsrChar ReadableString::operator[] (int64_t index) const {
 ReadableString::ReadableString() {}
 ReadableString::~ReadableString() {}
 
-ReadableString::ReadableString(const DsrChar *content, int64_t length)
-: readSection(content), length(length) {}
-
 ReadableString::ReadableString(const DsrChar *content)
 : readSection(content), length(strlen_utf32(content)) {}
 
+// Not the fastest constructor, but won't bloat the public header
+// Hopefully most compilers know how to optimize this
+static ReadableString createSubString(const DsrChar *content, int64_t length) {
+	ReadableString result;
+	result.readSection = content;
+	result.length = length;
+	return result;
+}
+
 String::String() {}
 String::String(const char* source) { this->append(source); }
 String::String(const char32_t* source) { this->append(source); }
@@ -664,7 +670,7 @@ String::String(const ReadableString& source) { this->append(source); }
 String::String(const String& source) { this->append(source); }
 
 String::String(Buffer buffer, DsrChar *content, int64_t length)
- : ReadableString(content, length), buffer(buffer), writeSection(content) {}
+ : ReadableString(createSubString(content, length)), buffer(buffer), writeSection(content) {}
 
 int64_t String::capacity() {
 	if (this->buffer.get() == nullptr) {
@@ -973,7 +979,7 @@ ReadableString dsr::string_exclusiveRange(const ReadableString& source, int64_t
 	if (inclusiveStart < 0) { inclusiveStart = 0; }
 	if (exclusiveEnd > source.length) { exclusiveEnd = source.length; }
 	// Return the overlapping interval
-	return ReadableString(&(source.readSection[inclusiveStart]), exclusiveEnd - inclusiveStart);
+	return createSubString(&(source.readSection[inclusiveStart]), exclusiveEnd - inclusiveStart);
 }
 
 ReadableString dsr::string_inclusiveRange(const ReadableString& source, int64_t inclusiveStart, int64_t inclusiveEnd) {

+ 0 - 3
Source/DFPSR/base/text.h

@@ -82,9 +82,6 @@ public:
 	ReadableString(const DsrChar *content);
 	// Destructor
 	virtual ~ReadableString();
-IMPL_ACCESS:
-	// Internal constructor
-	ReadableString(const DsrChar *content, int64_t length);
 public:
 	// Converting to unknown character encoding using only the ascii character subset
 	// A bug in GCC linking forces these to be virtual