1#pragma once
2
3#include <Core/Types.h>
4#include <Disks/IDisk.h>
5
6#include <functional>
7#include <unordered_map>
8#include <boost/noncopyable.hpp>
9#include <Poco/Util/AbstractConfiguration.h>
10
11
12namespace DB
13{
14class Context;
15
16/**
17 * Disk factory. Responsible for creating new disk objects.
18 */
19class DiskFactory final : private boost::noncopyable
20{
21public:
22 using Creator = std::function<DiskPtr(
23 const String & name,
24 const Poco::Util::AbstractConfiguration & config,
25 const String & config_prefix,
26 const Context & context)>;
27
28 static DiskFactory & instance();
29
30 void registerDiskType(const String & disk_type, Creator creator);
31
32 DiskPtr create(
33 const String & name,
34 const Poco::Util::AbstractConfiguration & config,
35 const String & config_prefix,
36 const Context & context) const;
37
38private:
39 using DiskTypeRegistry = std::unordered_map<String, Creator>;
40 DiskTypeRegistry registry;
41};
42
43}
44