Hybrid Query Processing Engine for Coprocessing in Database Systems
HyPE
optimization_criterion.hpp
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines