summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom <tomut@yahoo.com>2020-08-21 11:39:30 -0600
committerAndreas Kling <kling@serenityos.org>2020-08-22 10:46:24 +0200
commit5a98e329d157a2db8379e0c97c6bdc1328027843 (patch)
tree99fb2928e046fa7a6f69270ebed6ff8a8309dacd
parent8a75e0b892ab8e1c4765ac4e2f7289b258f1bf5a (diff)
downloadserenity-5a98e329d157a2db8379e0c97c6bdc1328027843.zip
AK: Get rid of make_singleton function
Just default the InitFunction template argument.
-rw-r--r--AK/FlyString.cpp2
-rw-r--r--AK/Singleton.h25
-rw-r--r--Kernel/CommandLine.cpp3
-rw-r--r--Kernel/Console.cpp2
-rw-r--r--Kernel/Devices/BXVGADevice.cpp2
-rw-r--r--Kernel/Devices/Device.cpp2
-rw-r--r--Kernel/Devices/KeyboardDevice.cpp2
-rw-r--r--Kernel/Devices/NullDevice.cpp2
-rw-r--r--Kernel/Devices/PATAChannel.cpp2
-rw-r--r--Kernel/Devices/PS2MouseDevice.cpp2
-rw-r--r--Kernel/Devices/SB16.cpp2
-rw-r--r--Kernel/Devices/VMWareBackdoor.cpp2
-rw-r--r--Kernel/FileSystem/DevPtsFS.cpp2
-rw-r--r--Kernel/FileSystem/FIFO.cpp2
-rw-r--r--Kernel/FileSystem/FileSystem.cpp2
-rw-r--r--Kernel/FileSystem/Inode.cpp2
-rw-r--r--Kernel/FileSystem/VirtualFileSystem.cpp2
-rw-r--r--Kernel/Interrupts/APIC.cpp2
-rw-r--r--Kernel/Net/IPv4Socket.cpp2
-rw-r--r--Kernel/Net/LocalSocket.cpp2
-rw-r--r--Kernel/Net/LoopbackAdapter.cpp2
-rw-r--r--Kernel/Net/NetworkAdapter.cpp2
-rw-r--r--Kernel/Net/Routing.cpp2
-rw-r--r--Kernel/Net/TCPSocket.cpp4
-rw-r--r--Kernel/Net/UDPSocket.cpp2
-rw-r--r--Kernel/Random.cpp2
-rw-r--r--Kernel/SharedBuffer.cpp2
-rw-r--r--Kernel/TTY/PTYMultiplexer.cpp2
-rw-r--r--Kernel/Time/TimeManagement.cpp2
-rw-r--r--Kernel/TimerQueue.cpp2
-rw-r--r--Kernel/VM/PageDirectory.cpp2
31 files changed, 42 insertions, 46 deletions
diff --git a/AK/FlyString.cpp b/AK/FlyString.cpp
index e6e369c3f6..637ef9c596 100644
--- a/AK/FlyString.cpp
+++ b/AK/FlyString.cpp
@@ -48,7 +48,7 @@ struct FlyStringImplTraits : public AK::Traits<StringImpl*> {
}
};
-static auto s_table = make_singleton<HashTable<StringImpl*, FlyStringImplTraits>>();
+static AK::Singleton<HashTable<StringImpl*, FlyStringImplTraits>> s_table;
static HashTable<StringImpl*, FlyStringImplTraits>& fly_impls()
{
diff --git a/AK/Singleton.h b/AK/Singleton.h
index 57962e3176..0abfa2b277 100644
--- a/AK/Singleton.h
+++ b/AK/Singleton.h
@@ -39,9 +39,18 @@
namespace AK {
-template<typename T, T* (*InitFunction)()>
+template<typename T>
+struct SingletonInstanceCreator {
+ static T* create()
+ {
+ return new T();
+ }
+};
+
+template<typename T, T* (*InitFunction)() = SingletonInstanceCreator<T>::create>
class Singleton {
AK_MAKE_NONCOPYABLE(Singleton);
+ AK_MAKE_NONMOVABLE(Singleton);
public:
Singleton() = default;
@@ -110,18 +119,4 @@ private:
mutable T* m_obj { nullptr }; // atomic
};
-template<typename T>
-struct SingletonInstanceCreator {
- static T* create()
- {
- return new T();
- }
-};
-
-template<typename T>
-inline Singleton<T, SingletonInstanceCreator<T>::create> make_singleton()
-{
- return Singleton<T, SingletonInstanceCreator<T>::create>();
-}
-
}
diff --git a/Kernel/CommandLine.cpp b/Kernel/CommandLine.cpp
index 8b50e7aeec..3155dd6bdc 100644
--- a/Kernel/CommandLine.cpp
+++ b/Kernel/CommandLine.cpp
@@ -38,6 +38,7 @@ const CommandLine& kernel_command_line()
void CommandLine::initialize(const String& string)
{
+ ASSERT(!s_the);
s_the = new CommandLine(string);
}
@@ -45,7 +46,7 @@ CommandLine::CommandLine(const String& string)
: m_string(string)
{
s_the = this;
-
+klog() << "CommandLine: " << string;
for (auto str : m_string.split(' ')) {
if (str == "") {
continue;
diff --git a/Kernel/Console.cpp b/Kernel/Console.cpp
index c3fa023521..e511a2d876 100644
--- a/Kernel/Console.cpp
+++ b/Kernel/Console.cpp
@@ -33,7 +33,7 @@
// Bytes output to 0xE9 end up on the Bochs console. It's very handy.
#define CONSOLE_OUT_TO_E9
-static auto s_the = AK::make_singleton<Console>();
+static AK::Singleton<Console> s_the;
static Kernel::SpinLock g_console_lock;
void Console::initialize()
diff --git a/Kernel/Devices/BXVGADevice.cpp b/Kernel/Devices/BXVGADevice.cpp
index ee822dac29..c9f1732260 100644
--- a/Kernel/Devices/BXVGADevice.cpp
+++ b/Kernel/Devices/BXVGADevice.cpp
@@ -57,7 +57,7 @@ namespace Kernel {
#define VBE_DISPI_ENABLED 0x01
#define VBE_DISPI_LFB_ENABLED 0x40
-static auto s_the = AK::make_singleton<BXVGADevice>();
+static AK::Singleton<BXVGADevice> s_the;
void BXVGADevice::initialize()
{
diff --git a/Kernel/Devices/Device.cpp b/Kernel/Devices/Device.cpp
index e08a0ac6f5..934c587ba6 100644
--- a/Kernel/Devices/Device.cpp
+++ b/Kernel/Devices/Device.cpp
@@ -31,7 +31,7 @@
namespace Kernel {
-static auto s_all_devices = AK::make_singleton<HashMap<u32, Device*>>();
+static AK::Singleton<HashMap<u32, Device*>> s_all_devices;
HashMap<u32, Device*>& Device::all_devices()
{
diff --git a/Kernel/Devices/KeyboardDevice.cpp b/Kernel/Devices/KeyboardDevice.cpp
index 192b54c721..531c488a9f 100644
--- a/Kernel/Devices/KeyboardDevice.cpp
+++ b/Kernel/Devices/KeyboardDevice.cpp
@@ -336,7 +336,7 @@ void KeyboardDevice::handle_irq(const RegisterState&)
}
}
-static auto s_the = AK::make_singleton<KeyboardDevice>();
+static AK::Singleton<KeyboardDevice> s_the;
void KeyboardDevice::initialize()
{
diff --git a/Kernel/Devices/NullDevice.cpp b/Kernel/Devices/NullDevice.cpp
index e879759d1d..5c6a5c59c5 100644
--- a/Kernel/Devices/NullDevice.cpp
+++ b/Kernel/Devices/NullDevice.cpp
@@ -30,7 +30,7 @@
namespace Kernel {
-static auto s_the = AK::make_singleton<NullDevice>();
+static AK::Singleton<NullDevice> s_the;
void NullDevice::initialize()
{
diff --git a/Kernel/Devices/PATAChannel.cpp b/Kernel/Devices/PATAChannel.cpp
index 553acd412b..172816ea1b 100644
--- a/Kernel/Devices/PATAChannel.cpp
+++ b/Kernel/Devices/PATAChannel.cpp
@@ -108,7 +108,7 @@ namespace Kernel {
#define PCI_Mass_Storage_Class 0x1
#define PCI_IDE_Controller_Subclass 0x1
-static auto s_pata_lock = AK::make_singleton<Lock>();
+static AK::Singleton<Lock> s_pata_lock;
static Lock& s_lock()
{
diff --git a/Kernel/Devices/PS2MouseDevice.cpp b/Kernel/Devices/PS2MouseDevice.cpp
index 913b6d5c73..0dbb7d8bba 100644
--- a/Kernel/Devices/PS2MouseDevice.cpp
+++ b/Kernel/Devices/PS2MouseDevice.cpp
@@ -57,7 +57,7 @@ namespace Kernel {
//#define PS2MOUSE_DEBUG
-static auto s_the = AK::make_singleton<PS2MouseDevice>();
+static AK::Singleton<PS2MouseDevice> s_the;
PS2MouseDevice::PS2MouseDevice()
: IRQHandler(IRQ_MOUSE)
diff --git a/Kernel/Devices/SB16.cpp b/Kernel/Devices/SB16.cpp
index 8e5611a836..8d7406f39b 100644
--- a/Kernel/Devices/SB16.cpp
+++ b/Kernel/Devices/SB16.cpp
@@ -77,7 +77,7 @@ void SB16::set_sample_rate(uint16_t hz)
dsp_write((u8)hz);
}
-static auto s_the = AK::make_singleton<SB16>();
+static AK::Singleton<SB16> s_the;
SB16::SB16()
: IRQHandler(SB16_DEFAULT_IRQ)
diff --git a/Kernel/Devices/VMWareBackdoor.cpp b/Kernel/Devices/VMWareBackdoor.cpp
index 04499e522a..d1686da6c5 100644
--- a/Kernel/Devices/VMWareBackdoor.cpp
+++ b/Kernel/Devices/VMWareBackdoor.cpp
@@ -111,7 +111,7 @@ private:
OwnPtr<VMWareBackdoor> m_backdoor;
};
-static auto s_vmware_backdoor = AK::make_singleton<VMWareBackdoorDetector>();
+static AK::Singleton<VMWareBackdoorDetector> s_vmware_backdoor;
VMWareBackdoor* VMWareBackdoor::the()
{
diff --git a/Kernel/FileSystem/DevPtsFS.cpp b/Kernel/FileSystem/DevPtsFS.cpp
index 2849b8f58b..7ee4d28aa0 100644
--- a/Kernel/FileSystem/DevPtsFS.cpp
+++ b/Kernel/FileSystem/DevPtsFS.cpp
@@ -46,7 +46,7 @@ DevPtsFS::~DevPtsFS()
{
}
-static auto s_ptys = AK::make_singleton<HashTable<unsigned>>();
+static AK::Singleton<HashTable<unsigned>> s_ptys;
bool DevPtsFS::initialize()
{
diff --git a/Kernel/FileSystem/FIFO.cpp b/Kernel/FileSystem/FIFO.cpp
index 52daa26f50..3b22a45c6a 100644
--- a/Kernel/FileSystem/FIFO.cpp
+++ b/Kernel/FileSystem/FIFO.cpp
@@ -38,7 +38,7 @@
namespace Kernel {
-static auto s_table = AK::make_singleton<Lockable<HashTable<FIFO*>>>();
+static AK::Singleton<Lockable<HashTable<FIFO*>>> s_table;
static Lockable<HashTable<FIFO*>>& all_fifos()
{
diff --git a/Kernel/FileSystem/FileSystem.cpp b/Kernel/FileSystem/FileSystem.cpp
index 2a96fb6e6c..49f1b284f3 100644
--- a/Kernel/FileSystem/FileSystem.cpp
+++ b/Kernel/FileSystem/FileSystem.cpp
@@ -38,7 +38,7 @@
namespace Kernel {
static u32 s_lastFileSystemID;
-static auto s_fs_map = AK::make_singleton<HashMap<u32, FS*>>();
+static AK::Singleton<HashMap<u32, FS*>> s_fs_map;
static HashMap<u32, FS*>& all_fses()
{
diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp
index edfba2eac9..e78f87bf59 100644
--- a/Kernel/FileSystem/Inode.cpp
+++ b/Kernel/FileSystem/Inode.cpp
@@ -39,7 +39,7 @@
namespace Kernel {
static SpinLock s_all_inodes_lock;
-static auto s_list = AK::make_singleton<InlineLinkedList<Inode>>();
+static AK::Singleton<InlineLinkedList<Inode>> s_list;
InlineLinkedList<Inode>& Inode::all_with_lock()
{
diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp
index 9ea1a2d5c7..ea06d462c3 100644
--- a/Kernel/FileSystem/VirtualFileSystem.cpp
+++ b/Kernel/FileSystem/VirtualFileSystem.cpp
@@ -41,7 +41,7 @@
namespace Kernel {
-static auto s_the = AK::make_singleton<VFS>();
+static AK::Singleton<VFS> s_the;
static constexpr int symlink_recursion_limit { 5 }; // FIXME: increase?
static constexpr int root_mount_flags = MS_NODEV | MS_NOSUID | MS_RDONLY;
diff --git a/Kernel/Interrupts/APIC.cpp b/Kernel/Interrupts/APIC.cpp
index d92416ab9c..23af86d11f 100644
--- a/Kernel/Interrupts/APIC.cpp
+++ b/Kernel/Interrupts/APIC.cpp
@@ -69,7 +69,7 @@
namespace Kernel {
-static auto s_apic = AK::make_singleton<APIC>();
+static AK::Singleton<APIC> s_apic;
class APICIPIInterruptHandler final : public GenericInterruptHandler {
public:
diff --git a/Kernel/Net/IPv4Socket.cpp b/Kernel/Net/IPv4Socket.cpp
index 2861f1a90e..09e56114ea 100644
--- a/Kernel/Net/IPv4Socket.cpp
+++ b/Kernel/Net/IPv4Socket.cpp
@@ -46,7 +46,7 @@
namespace Kernel {
-static auto s_table = AK::make_singleton<Lockable<HashTable<IPv4Socket*>>>();
+static AK::Singleton<Lockable<HashTable<IPv4Socket*>>> s_table;
Lockable<HashTable<IPv4Socket*>>& IPv4Socket::all_sockets()
{
diff --git a/Kernel/Net/LocalSocket.cpp b/Kernel/Net/LocalSocket.cpp
index 6750f93403..ca7863bd9c 100644
--- a/Kernel/Net/LocalSocket.cpp
+++ b/Kernel/Net/LocalSocket.cpp
@@ -38,7 +38,7 @@
namespace Kernel {
-static auto s_list = AK::make_singleton<Lockable<InlineLinkedList<LocalSocket>>>();
+static AK::Singleton<Lockable<InlineLinkedList<LocalSocket>>> s_list;
Lockable<InlineLinkedList<LocalSocket>>& LocalSocket::all_sockets()
{
diff --git a/Kernel/Net/LoopbackAdapter.cpp b/Kernel/Net/LoopbackAdapter.cpp
index 6b858c9549..5728b68b34 100644
--- a/Kernel/Net/LoopbackAdapter.cpp
+++ b/Kernel/Net/LoopbackAdapter.cpp
@@ -29,7 +29,7 @@
namespace Kernel {
-static auto s_loopback = AK::make_singleton<LoopbackAdapter>();
+static AK::Singleton<LoopbackAdapter> s_loopback;
LoopbackAdapter& LoopbackAdapter::the()
{
diff --git a/Kernel/Net/NetworkAdapter.cpp b/Kernel/Net/NetworkAdapter.cpp
index 898c95d710..4cfdd1cd43 100644
--- a/Kernel/Net/NetworkAdapter.cpp
+++ b/Kernel/Net/NetworkAdapter.cpp
@@ -38,7 +38,7 @@
namespace Kernel {
-static auto s_table = AK::make_singleton<Lockable<HashTable<NetworkAdapter*>>>();
+static AK::Singleton<Lockable<HashTable<NetworkAdapter*>>> s_table;
static Lockable<HashTable<NetworkAdapter*>>& all_adapters()
{
diff --git a/Kernel/Net/Routing.cpp b/Kernel/Net/Routing.cpp
index d73704cccf..281f06ceb4 100644
--- a/Kernel/Net/Routing.cpp
+++ b/Kernel/Net/Routing.cpp
@@ -34,7 +34,7 @@
namespace Kernel {
-static auto s_arp_table = AK::make_singleton<Lockable<HashMap<IPv4Address, MACAddress>>>();
+static AK::Singleton<Lockable<HashMap<IPv4Address, MACAddress>>> s_arp_table;
Lockable<HashMap<IPv4Address, MACAddress>>& arp_table()
{
diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp
index af7f5bb9f4..b7b615c951 100644
--- a/Kernel/Net/TCPSocket.cpp
+++ b/Kernel/Net/TCPSocket.cpp
@@ -63,14 +63,14 @@ void TCPSocket::set_state(State new_state)
}
}
-static auto s_socket_closing = AK::make_singleton<Lockable<HashMap<IPv4SocketTuple, RefPtr<TCPSocket>>>>();
+static AK::Singleton<Lockable<HashMap<IPv4SocketTuple, RefPtr<TCPSocket>>>> s_socket_closing;
Lockable<HashMap<IPv4SocketTuple, RefPtr<TCPSocket>>>& TCPSocket::closing_sockets()
{
return *s_socket_closing;
}
-static auto s_socket_tuples = AK::make_singleton<Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>>();
+static AK::Singleton<Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>> s_socket_tuples;
Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>& TCPSocket::sockets_by_tuple()
{
diff --git a/Kernel/Net/UDPSocket.cpp b/Kernel/Net/UDPSocket.cpp
index 27901a2e82..c770a4e184 100644
--- a/Kernel/Net/UDPSocket.cpp
+++ b/Kernel/Net/UDPSocket.cpp
@@ -42,7 +42,7 @@ void UDPSocket::for_each(Function<void(const UDPSocket&)> callback)
callback(*it.value);
}
-static auto s_map = AK::make_singleton<Lockable<HashMap<u16, UDPSocket*>>>();
+static AK::Singleton<Lockable<HashMap<u16, UDPSocket*>>> s_map;
Lockable<HashMap<u16, UDPSocket*>>& UDPSocket::sockets_by_port()
{
diff --git a/Kernel/Random.cpp b/Kernel/Random.cpp
index 472f4519c5..d8fe3469cd 100644
--- a/Kernel/Random.cpp
+++ b/Kernel/Random.cpp
@@ -33,7 +33,7 @@
namespace Kernel {
-static auto s_the = AK::make_singleton<KernelRng>();
+static AK::Singleton<KernelRng> s_the;
KernelRng& KernelRng::the()
{
diff --git a/Kernel/SharedBuffer.cpp b/Kernel/SharedBuffer.cpp
index a5186773a4..3a9fd4e42d 100644
--- a/Kernel/SharedBuffer.cpp
+++ b/Kernel/SharedBuffer.cpp
@@ -30,7 +30,7 @@
namespace Kernel {
-static auto s_map = AK::make_singleton<Lockable<HashMap<int, NonnullOwnPtr<SharedBuffer>>>>();
+static AK::Singleton<Lockable<HashMap<int, NonnullOwnPtr<SharedBuffer>>>> s_map;
Lockable<HashMap<int, NonnullOwnPtr<SharedBuffer>>>& shared_buffers()
{
diff --git a/Kernel/TTY/PTYMultiplexer.cpp b/Kernel/TTY/PTYMultiplexer.cpp
index c44a565ae9..e4b7394a9b 100644
--- a/Kernel/TTY/PTYMultiplexer.cpp
+++ b/Kernel/TTY/PTYMultiplexer.cpp
@@ -36,7 +36,7 @@
namespace Kernel {
static const unsigned s_max_pty_pairs = 8;
-static auto s_the = AK::make_singleton<PTYMultiplexer>();
+static AK::Singleton<PTYMultiplexer> s_the;
PTYMultiplexer& PTYMultiplexer::the()
{
diff --git a/Kernel/Time/TimeManagement.cpp b/Kernel/Time/TimeManagement.cpp
index ff37fa33aa..5fb1b4c52a 100644
--- a/Kernel/Time/TimeManagement.cpp
+++ b/Kernel/Time/TimeManagement.cpp
@@ -40,7 +40,7 @@
namespace Kernel {
-static auto s_the = AK::make_singleton<TimeManagement>();
+static AK::Singleton<TimeManagement> s_the;
TimeManagement& TimeManagement::the()
{
diff --git a/Kernel/TimerQueue.cpp b/Kernel/TimerQueue.cpp
index d12e4ecd52..b3f40c69c3 100644
--- a/Kernel/TimerQueue.cpp
+++ b/Kernel/TimerQueue.cpp
@@ -34,7 +34,7 @@
namespace Kernel {
-static auto s_the = AK::make_singleton<TimerQueue>();
+static AK::Singleton<TimerQueue> s_the;
TimerQueue& TimerQueue::the()
{
diff --git a/Kernel/VM/PageDirectory.cpp b/Kernel/VM/PageDirectory.cpp
index 573caa28db..f126ea95a5 100644
--- a/Kernel/VM/PageDirectory.cpp
+++ b/Kernel/VM/PageDirectory.cpp
@@ -38,7 +38,7 @@ static const FlatPtr userspace_range_base = 0x00800000;
static const FlatPtr userspace_range_ceiling = 0xbe000000;
static const FlatPtr kernelspace_range_base = 0xc0800000;
-static auto s_cr3_map = AK::make_singleton<HashMap<u32, PageDirectory*>>();
+static AK::Singleton<HashMap<u32, PageDirectory*>> s_cr3_map;
static HashMap<u32, PageDirectory*>& cr3_map()
{