Column-oriented GPU-accelerated Database Management System
CoGaDB
|
00001 /*********************************************************************************************************** 00002 Copyright (c) 2012, Sebastian Breß, Otto-von-Guericke University of Magdeburg, Germany. All rights reserved. 00003 00004 This program and accompanying materials are made available under the terms of the 00005 GNU LESSER GENERAL PUBLIC LICENSE - Version 3, http://www.gnu.org/licenses/lgpl-3.0.txt 00006 ***********************************************************************************************************/ 00007 #pragma once 00008 00009 #include <iostream> 00010 #include <string> 00011 #include <vector> 00012 #include <map> 00013 #include <memory> 00014 00015 //hype includes 00016 #include <config/global_definitions.hpp> 00017 #include <core/scheduling_decision.hpp> 00018 #include <core/time_measurement.hpp> 00019 #include <core/factory.hpp> 00020 00021 namespace hype{ 00022 namespace core{ 00023 00024 class Operation; //forward declaration, so that plugins can get pointer to operation 00025 00037 class OptimizationCriterion_Internal{ 00038 public: 00046 const SchedulingDecision getOptimalAlgorithm(const Tuple& input_values, Operation& op, DeviceTypeConstraint dev_constr); 00049 const std::string& getName() const; 00052 virtual ~OptimizationCriterion_Internal(); 00053 00054 protected: 00061 OptimizationCriterion_Internal(const std::string& name_of_optimization_criterion, const std::string& name_of_operation); 00065 std::map<std::string,unsigned int> map_algorithmname_to_number_of_executions_; 00066 private: 00072 virtual const SchedulingDecision getOptimalAlgorithm_internal(const Tuple& input_values, Operation& op, DeviceTypeConstraint dev_constr) = 0; 00074 std::string name_of_optimization_criterion_; 00076 std::string name_of_operation_; 00077 00078 }; 00079 00080 typedef core::Factory<OptimizationCriterion_Internal, std::string> OptimizationCriterionFactory; //aFactory; 00081 //typedef Loki::Singleton<OptimizationCriterionFactory> OptimizationCriterionFactorySingleton; 00082 00083 class OptimizationCriterionFactorySingleton{ 00084 public: 00085 static OptimizationCriterionFactory& Instance(); 00086 }; 00087 00089 std::tr1::shared_ptr<OptimizationCriterion_Internal> getNewOptimizationCriterionbyName(const std::string& name_of_optimization_criterion); 00090 00091 00092 }; //end namespace core 00093 }; //end namespace hype