/* MDAL - Mesh Data Abstraction Library (MIT License) Copyright (C) 2018 Peter Petrik (zilolv at gmail dot com) */ #ifndef MDAL_UTILS_HPP #define MDAL_UTILS_HPP #include #include #include #include #include "mdal_defines.hpp" // avoid unused variable warnings #define MDAL_UNUSED(x) (void)x; namespace MDAL { // numbers bool equals( double val1, double val2, double eps = std::numeric_limits::epsilon() ); // debugging void debug( const std::string &message ); /** Return whether file exists */ bool fileExists( const std::string &filename ); std::string baseName( const std::string &filename ); // strings enum ContainsBehaviour { CaseSensitive, CaseInsensitive }; bool startsWith( const std::string &str, const std::string &substr, ContainsBehaviour behaviour = CaseSensitive ); bool endsWith( const std::string &str, const std::string &substr, ContainsBehaviour behaviour = CaseSensitive ); bool contains( const std::string &str, const std::string &substr, ContainsBehaviour behaviour = CaseSensitive ); bool contains( const std::vector &list, const std::string &str ); std::string replace( const std::string &str, const std::string &substr, const std::string &replacestr, ContainsBehaviour behaviour = CaseSensitive ); std::string toLower( const std::string &std ); /** Return 0 if not possible to convert */ size_t toSizeT( const std::string &str ); double toDouble( const std::string &str ); bool toBool( const std::string &str ); enum SplitBehaviour { SkipEmptyParts, KeepEmptyParts }; std::vector split( const std::string &str, const std::string &delimiter, SplitBehaviour behaviour ); std::string join( const std::vector parts, const std::string &delimiter ); // http://www.cplusplus.com/faq/sequences/strings/trim/ inline std::string rtrim( const std::string &s, const std::string &delimiters = " \f\n\r\t\v" ) { return s.substr( 0, s.find_last_not_of( delimiters ) + 1 ); } // http://www.cplusplus.com/faq/sequences/strings/trim/ inline std::string ltrim( const std::string &s, const std::string &delimiters = " \f\n\r\t\v" ) { return s.substr( s.find_first_not_of( delimiters ) ); } // http://www.cplusplus.com/faq/sequences/strings/trim/ inline std::string trim( const std::string &s, const std::string &delimiters = " \f\n\r\t\v" ) { return ltrim( rtrim( s, delimiters ), delimiters ); } // extent BBox computeExtent( const Vertices &vertices ); } // namespace MDAL #endif //MDAL_UTILS_HPP