diff options
author | Tom <tomut@yahoo.com> | 2020-08-21 11:39:30 -0600 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-08-22 10:46:24 +0200 |
commit | 5a98e329d157a2db8379e0c97c6bdc1328027843 (patch) | |
tree | 99fb2928e046fa7a6f69270ebed6ff8a8309dacd | |
parent | 8a75e0b892ab8e1c4765ac4e2f7289b258f1bf5a (diff) | |
download | serenity-5a98e329d157a2db8379e0c97c6bdc1328027843.zip |
AK: Get rid of make_singleton function
Just default the InitFunction template argument.
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() { |