diff options
Diffstat (limited to 'Source/Ogda/Searchers/searcherfactory.h')
-rw-r--r-- | Source/Ogda/Searchers/searcherfactory.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Source/Ogda/Searchers/searcherfactory.h b/Source/Ogda/Searchers/searcherfactory.h new file mode 100644 index 00000000..e0f18a00 --- /dev/null +++ b/Source/Ogda/Searchers/searcherfactory.h @@ -0,0 +1,57 @@ +//----------------------------------------------------------------------------- +// Name: searcherfactory.h +// Developer: Wolfire Games LLC +// Description: +// License: Read below +//----------------------------------------------------------------------------- +// +// Copyright 2022 Wolfire Games LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//----------------------------------------------------------------------------- +#pragma once +#include "searcher.h" +#include <vector> + +class SearcherFactory +{ +private: + class SeekerFactoryBase + { + public: + virtual SeekerBase* NewInstance() = 0; + virtual std::string GetSeekerName() = 0; + }; + + template<class Seeker> + class SeekerFactory : public SeekerFactoryBase + { + virtual SeekerBase* NewInstance() + { + return new Seeker(); + } + + virtual std::string GetSeekerName() + { + return std::string(Seeker().GetName()); + } + }; + + std::vector<SeekerFactoryBase*> seekers; +public: + SearcherFactory(); + ~SearcherFactory(); + bool HasSearcher( const std::string& searcher ); + Searcher CreateSearcher( const std::string& searcher, const std::string& path_ending, const std::string& type_pattern_re ); +}; |