Skip to content

Commit

Permalink
AK: Reduce header dependency graph of String.h
Browse files Browse the repository at this point in the history
String.h no longer pulls in StringView.h. We do this by moving a bunch
of String functions out-of-line.
  • Loading branch information
awesomekling committed Mar 23, 2020
1 parent 1dd71bd commit 7d862dd
Show file tree
Hide file tree
Showing 39 changed files with 122 additions and 77 deletions.
1 change: 1 addition & 0 deletions AK/BufferStream.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

#include <AK/ByteBuffer.h>
#include <AK/String.h>
#include <AK/StringView.h>

namespace AK {

Expand Down
3 changes: 2 additions & 1 deletion AK/Demangle.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@
#pragma once

#include <AK/String.h>
#include <AK/StringView.h>

#ifndef BUILDING_SERENITY_TOOLCHAIN
#include <cxxabi.h>
# include <cxxabi.h>
#endif

namespace AK {
Expand Down
7 changes: 4 additions & 3 deletions AK/FileSystemPath.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "FileSystemPath.h"
#include "StringBuilder.h"
#include "Vector.h"
#include <AK/FileSystemPath.h>
#include <AK/StringBuilder.h>
#include <AK/StringView.h>
#include <AK/Vector.h>

namespace AK {

Expand Down
6 changes: 6 additions & 0 deletions AK/FlyString.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <AK/HashTable.h>
#include <AK/String.h>
#include <AK/StringUtils.h>
#include <AK/StringView.h>

namespace AK {

Expand Down Expand Up @@ -98,4 +99,9 @@ FlyString FlyString::to_lowercase() const
return String(*m_impl).to_lowercase();
}

StringView FlyString::view() const
{
return { characters(), length() };
}

}
2 changes: 1 addition & 1 deletion AK/FlyString.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class FlyString {
const char* characters() const { return m_impl ? m_impl->characters() : nullptr; }
size_t length() const { return m_impl ? m_impl->length() : 0; }

StringView view() const { return { characters(), length() }; }
StringView view() const;

FlyString to_lowercase() const;

Expand Down
1 change: 1 addition & 0 deletions AK/IPv4Address.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <AK/NetworkOrdered.h>
#include <AK/Optional.h>
#include <AK/String.h>
#include <AK/StringView.h>
#include <AK/Vector.h>

typedef u32 in_addr_t;
Expand Down
55 changes: 55 additions & 0 deletions AK/String.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <AK/StdLibExtras.h>
#include <AK/String.h>
#include <AK/StringBuilder.h>
#include <AK/StringView.h>
#include <AK/Vector.h>

#ifndef KERNEL
Expand All @@ -41,6 +42,14 @@ extern "C" char* strstr(const char* haystack, const char* needle);

namespace AK {

String::String(const StringView& view)
{
if (view.m_impl)
m_impl = *view.m_impl;
else
m_impl = StringImpl::create(view.characters_without_null_termination(), view.length());
}

bool String::operator==(const String& other) const
{
if (!m_impl)
Expand Down Expand Up @@ -341,4 +350,50 @@ String String::to_uppercase() const
return m_impl->to_uppercase();
}

bool operator<(const char* characters, const String& string)
{
if (!characters)
return !string.is_null();

if (string.is_null())
return false;

return __builtin_strcmp(characters, string.characters()) < 0;
}

bool operator>=(const char* characters, const String& string)
{
return !(characters < string);
}

bool operator>(const char* characters, const String& string)
{
if (!characters)
return !string.is_null();

if (string.is_null())
return false;

return __builtin_strcmp(characters, string.characters()) > 0;
}

bool operator<=(const char* characters, const String& string)
{
return !(characters > string);
}

bool String::operator==(const char* cstring) const
{
if (is_null())
return !cstring;
if (!cstring)
return false;
return !__builtin_strcmp(characters(), cstring);
}

StringView String::view() const
{
return { characters(), length() };
}

}
78 changes: 8 additions & 70 deletions AK/String.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
#include <AK/RefPtr.h>
#include <AK/StringImpl.h>
#include <AK/StringUtils.h>
#include <AK/StringView.h>
#include <AK/Traits.h>

namespace AK {
Expand Down Expand Up @@ -62,14 +61,7 @@ class String {
~String() {}

String() {}

String(const StringView& view)
{
if (view.m_impl)
m_impl = *view.m_impl;
else
m_impl = StringImpl::create(view.characters_without_null_termination(), view.length());
}
String(const StringView&);

String(const String& other)
: m_impl(const_cast<String&>(other).m_impl)
Expand Down Expand Up @@ -166,19 +158,8 @@ class String {
bool operator<=(const String& other) const { return !(*this > other); }
bool operator<=(const char* other) const { return !(*this > other); }

bool operator==(const char* cstring) const
{
if (is_null())
return !cstring;
if (!cstring)
return false;
return !__builtin_strcmp(characters(), cstring);
}

bool operator!=(const char* cstring) const
{
return !(*this == cstring);
}
bool operator==(const char* cstring) const;
bool operator!=(const char* cstring) const { return !(*this == cstring); }

String isolated_copy() const;

Expand Down Expand Up @@ -228,28 +209,12 @@ class String {
static String number(long);
static String number(long long);

StringView view() const
{
return { characters(), length() };
}
StringView view() const;

private:
RefPtr<StringImpl> m_impl;
};

inline bool StringView::operator==(const String& string) const
{
if (string.is_null())
return !m_characters;
if (!m_characters)
return false;
if (m_length != string.length())
return false;
if (m_characters == string.characters())
return true;
return !__builtin_memcmp(m_characters, string.characters(), m_length);
}

template<>
struct Traits<String> : public GenericTraits<String> {
static unsigned hash(const String& s) { return s.impl() ? s.impl()->hash() : 0; }
Expand All @@ -260,37 +225,10 @@ struct CaseInsensitiveStringTraits : public AK::Traits<String> {
static bool equals(const String& a, const String& b) { return a.to_lowercase() == b.to_lowercase(); }
};

inline bool operator<(const char* characters, const String& string)
{
if (!characters)
return !string.is_null();

if (string.is_null())
return false;

return __builtin_strcmp(characters, string.characters()) < 0;
}

inline bool operator>=(const char* characters, const String& string)
{
return !(characters < string);
}

inline bool operator>(const char* characters, const String& string)
{
if (!characters)
return !string.is_null();

if (string.is_null())
return false;

return __builtin_strcmp(characters, string.characters()) > 0;
}

inline bool operator<=(const char* characters, const String& string)
{
return !(characters > string);
}
bool operator<(const char*, const String&);
bool operator>=(const char*, const String&);
bool operator>(const char*, const String&);
bool operator<=(const char*, const String&);

String escape_html_entities(const StringView& html);

Expand Down
1 change: 1 addition & 0 deletions AK/StringBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <AK/StdLibExtras.h>
#include <AK/String.h>
#include <AK/StringBuilder.h>
#include <AK/StringView.h>

namespace AK {

Expand Down
13 changes: 13 additions & 0 deletions AK/StringView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -200,4 +200,17 @@ unsigned StringView::hash() const
return string_hash(characters_without_null_termination(), length());
}

bool StringView::operator==(const String& string) const
{
if (string.is_null())
return !m_characters;
if (!m_characters)
return false;
if (m_length != string.length())
return false;
if (m_characters == string.characters())
return true;
return !__builtin_memcmp(m_characters, string.characters(), m_length);
}

}
1 change: 1 addition & 0 deletions Kernel/ACPI/ACPIParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <AK/StringView.h>
#include <Kernel/ACPI/ACPIParser.h>

namespace Kernel {
Expand Down
1 change: 1 addition & 0 deletions Kernel/ACPI/ACPIStaticParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <AK/StringView.h>
#include <Kernel/ACPI/ACPIStaticParser.h>
#include <Kernel/PCI/Access.h>
#include <Kernel/VM/MemoryManager.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/ACPI/DMIDecoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <AK/StringView.h>
#include <Kernel/ACPI/DMIDecoder.h>
#include <Kernel/VM/MemoryManager.h>
#include <LibBareMetal/StdLib.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/ACPI/MultiProcessorParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <AK/StringView.h>
#include <Kernel/ACPI/MultiProcessorParser.h>
#include <Kernel/VM/MemoryManager.h>
#include <LibBareMetal/StdLib.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/Devices/KeyboardDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

#include <AK/Assertions.h>
#include <AK/ByteBuffer.h>
#include <AK/StringView.h>
#include <AK/Types.h>
#include <Kernel/Arch/i386/CPU.h>
#include <Kernel/Devices/KeyboardDevice.h>
Expand Down
3 changes: 2 additions & 1 deletion Kernel/Devices/PATAChannel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "PATADiskDevice.h"
#include <AK/ByteBuffer.h>
#include <AK/StringView.h>
#include <Kernel/Devices/PATAChannel.h>
#include <Kernel/Devices/PATADiskDevice.h>
#include <Kernel/FileSystem/ProcFS.h>
#include <Kernel/Process.h>
#include <Kernel/VM/MemoryManager.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/Devices/PATADiskDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
//#define PATA_DEVICE_DEBUG

#include <AK/Memory.h>
#include <AK/StringView.h>
#include <Kernel/Devices/PATAChannel.h>
#include <Kernel/Devices/PATADiskDevice.h>
#include <Kernel/FileSystem/FileDescription.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/Devices/SB16.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
*/

#include <AK/Memory.h>
#include <AK/StringView.h>
#include <Kernel/Devices/SB16.h>
#include <Kernel/Thread.h>
#include <Kernel/VM/AnonymousVMObject.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/DoubleBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <AK/StringView.h>
#include <Kernel/DoubleBuffer.h>

namespace Kernel {
Expand Down
1 change: 1 addition & 0 deletions Kernel/FileSystem/Custody.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
*/

#include <AK/StringBuilder.h>
#include <AK/StringView.h>
#include <AK/Vector.h>
#include <Kernel/FileSystem/Custody.h>
#include <Kernel/FileSystem/Inode.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/FileSystem/DevPtsFS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
*/

#include <AK/StringBuilder.h>
#include <AK/StringView.h>
#include <Kernel/FileSystem/DevPtsFS.h>
#include <Kernel/FileSystem/VirtualFileSystem.h>
#include <Kernel/TTY/SlavePTY.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/FileSystem/DiskBackedFileSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <AK/StringView.h>
#include <Kernel/Arch/i386/CPU.h>
#include <Kernel/Devices/BlockDevice.h>
#include <Kernel/FileSystem/DiskBackedFileSystem.h>
Expand Down
1 change: 1 addition & 0 deletions Kernel/FileSystem/Ext2FileSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <AK/BufferStream.h>
#include <AK/HashMap.h>
#include <AK/StdLibExtras.h>
#include <AK/StringView.h>
#include <Kernel/Devices/BlockDevice.h>
#include <Kernel/FileSystem/Ext2FileSystem.h>
#include <Kernel/FileSystem/FileDescription.h>
Expand Down
Loading

0 comments on commit 7d862dd

Please sign in to comment.