]> git.ipfire.org Git - thirdparty/squid.git/blob - src/DiskIO/DiskIOModule.h
3c22167d0eb21ef9e021559f4f5566f1cef3d63d
[thirdparty/squid.git] / src / DiskIO / DiskIOModule.h
1 /*
2 * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_DISKIOMODULE_H
10 #define SQUID_DISKIOMODULE_H
11
12 #include <vector>
13
14 /* forward decls */
15
16 class CacheManager;
17
18 class DiskIOStrategy;
19
20 class DiskIOModule
21 {
22
23 public:
24 /** Poke all compiled modules for self-setup */
25 static void SetupAllModules();
26 static void ModuleAdd(DiskIOModule &);
27 static void FreeAllModules();
28
29 static DiskIOModule *Find(char const *type);
30
31 /** Find *any* usable disk module. This will look for the 'best'
32 * available module for this system.
33 */
34 static DiskIOModule *FindDefault();
35 static std::vector<DiskIOModule*> const &Modules();
36 typedef std::vector<DiskIOModule*>::iterator iterator;
37 typedef std::vector<DiskIOModule*>::const_iterator const_iterator;
38 DiskIOModule();
39 virtual ~DiskIOModule() {}
40
41 virtual void init() = 0;
42 //virtual void registerWithCacheManager(void);
43 virtual void gracefulShutdown() = 0;
44 virtual DiskIOStrategy *createStrategy() = 0;
45
46 virtual char const *type () const = 0;
47 // Not implemented
48 DiskIOModule(DiskIOModule const &);
49 DiskIOModule &operator=(DiskIOModule const&);
50
51 protected:
52 //bool initialised;
53 static void RegisterAllModulesWithCacheManager(void);
54
55 private:
56 static std::vector<DiskIOModule*> &GetModules();
57 static std::vector<DiskIOModule*> *_Modules;
58 };
59
60 #endif /* SQUID_DISKIOMODULE_H */
61