Skip to content

Commit 1614560

Browse files
committed
Strings: Move implementations to internal
1 parent 4ed5a47 commit 1614560

File tree

10 files changed

+90
-80
lines changed

10 files changed

+90
-80
lines changed

Bindings/cpp/SC.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,7 @@
2222
#include "../../Libraries/Process/Process.cpp"
2323
#include "../../Libraries/SerializationText/SerializationJson.cpp"
2424
#include "../../Libraries/Socket/Socket.cpp"
25-
#include "../../Libraries/Strings/Console.cpp"
26-
#include "../../Libraries/Strings/StringBuilder.cpp"
27-
#include "../../Libraries/Strings/StringConverter.cpp"
28-
#include "../../Libraries/Strings/StringFormat.cpp"
29-
#include "../../Libraries/Strings/StringIterator.cpp"
30-
#include "../../Libraries/Strings/StringView.cpp"
25+
#include "../../Libraries/Strings/Strings.cpp"
3126
#include "../../Libraries/Testing/Testing.cpp"
3227
#include "../../Libraries/Threading/ThreadPool.cpp"
3328
#include "../../Libraries/Threading/Threading.cpp"

Libraries/Strings/Console.cpp renamed to Libraries/Strings/Internal/Console.inl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
// Copyright (c) Stefano Cristiano
22
// SPDX-License-Identifier: MIT
33

4-
#include "Console.h"
5-
#include "../Foundation/Limits.h"
6-
#include "../Foundation/Platform.h"
7-
#include "../Strings/StringConverter.h"
4+
#include "../../Foundation/Limits.h"
5+
#include "../../Foundation/Platform.h"
6+
#include "../../Strings/StringConverter.h"
7+
#include "../Console.h"
88

99
#include <stdio.h> // stdout
1010
#include <string.h> // strlen

Libraries/Strings/Internal/String.inl

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Copyright (c) Stefano Cristiano
2+
// SPDX-License-Identifier: MIT
3+
4+
#include "../../Strings/String.h"
5+
6+
bool SC::String::owns(StringView view) const
7+
{
8+
return (view.bytesWithoutTerminator() >= this->view().bytesWithoutTerminator()) and
9+
(view.bytesWithoutTerminator() <= (this->view().bytesWithoutTerminator() + this->view().sizeInBytes()));
10+
}
11+
12+
bool SC::String::assign(StringView sv)
13+
{
14+
encoding = sv.getEncoding();
15+
const size_t length = sv.sizeInBytes();
16+
const size_t numZero = StringEncodingGetSize(encoding);
17+
if (not data.resizeWithoutInitializing(length + numZero))
18+
return false;
19+
if (sv.isNullTerminated())
20+
{
21+
memcpy(data.items, sv.bytesWithoutTerminator(), length + numZero);
22+
}
23+
else
24+
{
25+
if (length > 0)
26+
{
27+
memcpy(data.items, sv.bytesWithoutTerminator(), length);
28+
}
29+
for (size_t idx = 0; idx < numZero; ++idx)
30+
{
31+
data.items[length + idx] = 0;
32+
}
33+
}
34+
return true;
35+
}
36+
37+
SC::StringView SC::String::view() const SC_LANGUAGE_LIFETIME_BOUND
38+
{
39+
const bool isEmpty = data.isEmpty();
40+
const char* items = isEmpty ? nullptr : data.items;
41+
return StringView({items, isEmpty ? 0 : data.size() - StringEncodingGetSize(encoding)}, not isEmpty, encoding);
42+
}
43+
44+
SC::native_char_t* SC::String::nativeWritableBytesIncludingTerminator()
45+
{
46+
#if SC_PLATFORM_WINDOWS
47+
SC_ASSERT_RELEASE(encoding == StringEncoding::Utf16);
48+
return reinterpret_cast<wchar_t*>(data.data());
49+
#else
50+
SC_ASSERT_RELEASE(encoding < StringEncoding::Utf16);
51+
return data.data();
52+
#endif
53+
}

Libraries/Strings/StringBuilder.cpp renamed to Libraries/Strings/Internal/StringBuilder.inl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
// Copyright (c) Stefano Cristiano
22
// SPDX-License-Identifier: MIT
3-
#include "../Strings/StringBuilder.h"
4-
#include "../Foundation/Result.h"
5-
#include "../Strings/String.h"
6-
#include "../Strings/StringConverter.h"
3+
4+
#include "../../Foundation/Result.h"
5+
#include "../../Strings/String.h"
6+
#include "../../Strings/StringBuilder.h"
7+
#include "../../Strings/StringConverter.h"
8+
79
namespace SC
810
{
911
StringBuilder::StringBuilder(Vector<char>& stringData, StringEncoding encoding, Flags f)

Libraries/Strings/StringConverter.cpp renamed to Libraries/Strings/Internal/StringConverter.inl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
// Copyright (c) Stefano Cristiano
22
// SPDX-License-Identifier: MIT
33

4-
#include "../Strings/StringConverter.h"
5-
#include "../Foundation/Deferred.h"
6-
#include "../Foundation/Result.h"
7-
#include "../Strings/String.h"
4+
#include "../../Foundation/Deferred.h"
5+
#include "../../Foundation/Result.h"
6+
#include "../../Strings/String.h"
7+
#include "../../Strings/StringConverter.h"
88

99
#if SC_PLATFORM_WINDOWS
1010
#define WIN32_LEAN_AND_MEAN

Libraries/Strings/StringFormat.cpp renamed to Libraries/Strings/Internal/StringFormat.inl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// Copyright (c) Stefano Cristiano
22
// SPDX-License-Identifier: MIT
3-
#include "../Strings/StringFormat.h"
4-
#include "../Strings/Console.h" // TODO: Console here is a module circular dependency. Consider type-erasing with a Function
5-
#include "../Strings/String.h"
6-
#include "../Strings/StringConverter.h"
3+
4+
#include "../../Strings/Console.h" // TODO: Console here is a module circular dependency. Consider type-erasing with a Function
5+
#include "../../Strings/String.h"
6+
#include "../../Strings/StringConverter.h"
7+
#include "../../Strings/StringFormat.h"
78

89
#include <inttypes.h> // PRIu64 / PRIi64
910
#include <stdio.h> // snprintf

Libraries/Strings/StringIterator.cpp renamed to Libraries/Strings/Internal/StringIterator.inl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Stefano Cristiano
22
// SPDX-License-Identifier: MIT
3-
#include "../Strings/StringIterator.h"
3+
4+
#include "../../Strings/StringIterator.h"
45

56
namespace SC
67
{

Libraries/Strings/StringView.cpp renamed to Libraries/Strings/Internal/StringView.inl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
// Copyright (c) Stefano Cristiano
22
// SPDX-License-Identifier: MIT
3-
#include "../Strings/StringView.h"
3+
4+
#include "../../Strings/StringView.h"
45

56
#include <errno.h> // errno
67
#include <stdint.h> // INT32_MIN/MAX
7-
#include <stdlib.h> //atoi
8-
#include <string.h> //strlen
8+
#include <stdlib.h> // atoi
9+
#include <string.h> // strlen
10+
911
SC::StringView SC::StringView::fromNullTerminated(const char* text, StringEncoding encoding)
1012
{
1113
if (text == nullptr)

Libraries/Strings/String.h

Lines changed: 1 addition & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ struct SC::String
136136

137137
protected:
138138
// TODO: nativeWritableBytesIncludingTerminator should be removed
139-
[[nodiscard]] auto nativeWritableBytesIncludingTerminator();
139+
[[nodiscard]] native_char_t* nativeWritableBytesIncludingTerminator();
140140

141141
// All these friendships are made to leverage writing directly to the Vector<char>
142142
// but while still keeping it an implementation detail
@@ -161,56 +161,3 @@ struct SC::String
161161
#endif
162162
};
163163
//! @}
164-
165-
//-----------------------------------------------------------------------------------------------------------------------
166-
// Implementations Details
167-
//-----------------------------------------------------------------------------------------------------------------------
168-
169-
inline bool SC::String::owns(StringView view) const
170-
{
171-
return (view.bytesWithoutTerminator() >= this->view().bytesWithoutTerminator()) and
172-
(view.bytesWithoutTerminator() <= (this->view().bytesWithoutTerminator() + this->view().sizeInBytes()));
173-
}
174-
175-
inline bool SC::String::assign(StringView sv)
176-
{
177-
encoding = sv.getEncoding();
178-
const size_t length = sv.sizeInBytes();
179-
const size_t numZero = StringEncodingGetSize(encoding);
180-
if (not data.resizeWithoutInitializing(length + numZero))
181-
return false;
182-
if (sv.isNullTerminated())
183-
{
184-
memcpy(data.items, sv.bytesWithoutTerminator(), length + numZero);
185-
}
186-
else
187-
{
188-
if (length > 0)
189-
{
190-
memcpy(data.items, sv.bytesWithoutTerminator(), length);
191-
}
192-
for (size_t idx = 0; idx < numZero; ++idx)
193-
{
194-
data.items[length + idx] = 0;
195-
}
196-
}
197-
return true;
198-
}
199-
200-
inline SC::StringView SC::String::view() const SC_LANGUAGE_LIFETIME_BOUND
201-
{
202-
const bool isEmpty = data.isEmpty();
203-
const char* items = isEmpty ? nullptr : data.items;
204-
return StringView({items, isEmpty ? 0 : data.size() - StringEncodingGetSize(encoding)}, not isEmpty, encoding);
205-
}
206-
207-
inline auto SC::String::nativeWritableBytesIncludingTerminator()
208-
{
209-
#if SC_PLATFORM_WINDOWS
210-
SC_ASSERT_RELEASE(encoding == StringEncoding::Utf16);
211-
return reinterpret_cast<wchar_t*>(data.data());
212-
#else
213-
SC_ASSERT_RELEASE(encoding < StringEncoding::Utf16);
214-
return data.data();
215-
#endif
216-
}

Libraries/Strings/Strings.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Copyright (c) Stefano Cristiano
2+
// SPDX-License-Identifier: MIT
3+
#include "Internal/Console.inl"
4+
#include "Internal/String.inl"
5+
#include "Internal/StringBuilder.inl"
6+
#include "Internal/StringConverter.inl"
7+
#include "Internal/StringFormat.inl"
8+
#include "Internal/StringIterator.inl"
9+
#include "Internal/StringView.inl"

0 commit comments

Comments
 (0)