.. _program_listing_file_fields2cover_objectives_base_objective.h: Program Listing for File base_objective.h ========================================= |exhale_lsh| :ref:`Return to documentation for file <file_fields2cover_objectives_base_objective.h>` (``fields2cover/objectives/base_objective.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp //============================================================================= // Copyright (C) 2021-2024 Wageningen University - All Rights Reserved // Author: Gonzalo Mier // BSD-3 License //============================================================================= #pragma once #ifndef FIELDS2COVER_OBJECTIVES_BASE_OBJECTIVE_H_ #define FIELDS2COVER_OBJECTIVES_BASE_OBJECTIVE_H_ #include <vector> #include "fields2cover/types.h" namespace f2c::obj { template <typename T> class BaseObjective { public: // Avoid using variadic templates. SWIG don't work well with it template <typename T1> double computeCostWithMinimizingSign(const T1& t1) { return (static_cast<T*>(this)->isMinimizing() ? 1.0 : -1.0) * static_cast<T*>(this)->computeCost(t1); } template <typename T1, typename T2> double computeCostWithMinimizingSign(const T1& t1, const T2& t2) { return (static_cast<T*>(this)->isMinimizing() ? 1.0 : -1.0) * static_cast<T*>(this)->computeCost(t1, t2); } template <typename T1, typename T2, typename T3> double computeCostWithMinimizingSign( const T1& t1, const T2& t2, const T3& t3) { return (static_cast<T*>(this)->isMinimizing() ? 1.0 : -1.0) * static_cast<T*>(this)->computeCost(t1, t2, t3); } template <typename T1, typename T2, typename T3, typename T4> double computeCostWithMinimizingSign( const T1& t1, const T2& t2, const T3& t3, const T4& t4) { return (static_cast<T*>(this)->isMinimizing() ? 1.0 : -1.0) * static_cast<T*>(this)->computeCost(t1, t2, t3, t4); } public: virtual bool isMinimizing() const { return true;} virtual bool isMaximizing() const { return !isMinimizing();} virtual ~BaseObjective() = default; }; } // namespace f2c::obj #endif // FIELDS2COVER_OBJECTIVES_BASE_OBJECTIVE_H_