Column-oriented GPU-accelerated Database Management System
CoGaDB
/home/sebastian/gpudbms/trunk/hype-library/include/core/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