| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- /*
- Author: Juan Rada-Vilela, Ph.D.
- Copyright (C) 2010-2014 FuzzyLite Limited
- All rights reserved
- This file is part of fuzzylite.
- fuzzylite is free software: you can redistribute it and/or modify it under
- the terms of the GNU Lesser General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
- fuzzylite is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- for more details.
- You should have received a copy of the GNU Lesser General Public License
- along with fuzzylite. If not, see <http://www.gnu.org/licenses/>.
- fuzzylite™ is a trademark of FuzzyLite Limited.
- */
- #ifndef FL_FUZZYLITE_H
- #define FL_FUZZYLITE_H
- #include <algorithm>
- #include <cmath>
- #include <iostream>
- #include <sstream>
- #include <limits>
- #include <memory>
- #ifndef FL_VERSION
- #define FL_VERSION "?"
- #endif
- #ifndef FL_DATE
- #define FL_DATE "?"
- #endif
- #ifndef FL_BUILD_PATH
- #define FL_BUILD_PATH ""
- #endif
- #define FL__FILE__ std::string(__FILE__).substr(std::string(FL_BUILD_PATH).size())
- #define FL_LOG_PREFIX FL__FILE__ << " [" << __LINE__ << "]:"
- #define FL_AT FL__FILE__, __LINE__, __FUNCTION__
- #define FL_LOG(message) {if (fl::fuzzylite::logging()){std::cout << FL_LOG_PREFIX << message << std::endl;}}
- #define FL_LOGP(message) {if (fl::fuzzylite::logging()){std::cout << message << std::endl;}}
- #define FL_DEBUG_BEGIN if (fl::fuzzylite::debug()){
- #define FL_DEBUG_END }
- #define FL_DBG(message) FL_DEBUG_BEGIN\
- std::cout << FL__FILE__ << "::" << __FUNCTION__ << "[" << __LINE__ << "]:" \
- << message << std::endl;\
- FL_DEBUG_END
- #ifdef FL_WINDOWS
- #include <ciso646> //alternative operator spellings:
- //#define and &&
- //#define or ||
- //#define not !
- //#define bitand &
- //#define bitor |
- //TODO: Address warning 4251 by exporting members?
- //http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html
- #ifdef _MSC_VER
- #pragma warning (disable:4251)
- #endif
- //fuzzylite as a shared library is exported
- //Applications linking with fuzzylite as a shared library need to import
- //fuzzylite as a static library does not export or import
- //Applications linking with fuzzylite as a static library do not import
- #if defined(FL_EXPORT_LIBRARY)
- #define FL_API __declspec(dllexport)
- #elif defined(FL_IMPORT_LIBRARY)
- #define FL_API __declspec(dllimport)
- #else
- #define FL_API
- #endif
- #else
- #define FL_API
- #endif
- namespace fl {
- #ifdef FL_USE_FLOAT
- typedef float scalar;
- #else
- typedef double scalar;
- #endif
- const scalar nan = std::numeric_limits<scalar>::quiet_NaN();
- const scalar inf = std::numeric_limits<scalar>::infinity();
- #ifdef FL_CPP11
- //C++11 defines
- //Pointers
- const std::nullptr_t null = nullptr;
- #define FL_unique_ptr std::unique_ptr
- #define FL_move_ptr(x) std::move(x)
- //Identifiers
- #define FL_IOVERRIDE override
- #define FL_IFINAL final
- #define FL_IDEFAULT = default
- #define FL_IDELETE = delete
- #define FL_INOEXCEPT noexcept
- //Constructors
- #define FL_DEFAULT_COPY(Class) \
- Class(const Class&) = default; \
- Class& operator=(const Class&) = default;
- #define FL_DEFAULT_MOVE(Class) \
- Class(Class&&) = default; \
- Class& operator=(Class&&) = default;
- #define FL_DEFAULT_COPY_AND_MOVE(Class) \
- Class(const Class&) = default; \
- Class& operator=(const Class&) = default;\
- Class(Class&&) = default; \
- Class& operator=(Class&&) = default;
- #define FL_DISABLE_COPY(Class) \
- Class(const Class &) = delete;\
- Class &operator=(const Class &) = delete;
- #else
- //C++98 defines
- //Pointers
- const long null = 0L;
- #define FL_unique_ptr std::auto_ptr
- #define FL_move_ptr(x) x
- //Identifiers
- #define FL_IOVERRIDE
- #define FL_IFINAL
- #define FL_IDEFAULT
- #define FL_IDELETE
- #define FL_INOEXCEPT throw()
- //Constructors
- #define FL_DEFAULT_COPY(Class)
- #define FL_DEFAULT_MOVE(Class)
- #define FL_DEFAULT_COPY_AND_MOVE(Class)
- #define FL_DISABLE_COPY(Class) \
- Class(const Class &);\
- Class &operator=(const Class &);
- #endif
- }
- namespace fl {
- class FL_API fuzzylite {
- protected:
- static int _decimals;
- static scalar _macheps;
- static bool _debug;
- static bool _logging;
- public:
- static std::string name();
- static std::string fullname();
- static std::string version();
- static std::string longVersion();
- static std::string license();
- static std::string author();
- static std::string company();
- static std::string website();
- static std::string date();
- static std::string platform();
- static std::string floatingPoint();
- static bool debug();
- static void setDebug(bool debug);
- static int decimals();
- static void setDecimals(int decimals);
- static scalar macheps();
- static void setMachEps(scalar macheps);
- static bool logging();
- static void setLogging(bool logging);
- };
- }
- #endif /* FL_FUZZYLITE_H */
|