From cca2ab2f5006aed81ff45687dc14071092f9ae4e Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Mon, 25 Nov 2019 16:57:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/myx/filesystem/current_executable.hpp | 28 ++++- src/myx/filesystem/paths.hpp | 119 +++++++++++++++++++--- src/myx/math/units.hpp | 33 ++++-- 3 files changed, 154 insertions(+), 26 deletions(-) diff --git a/src/myx/filesystem/current_executable.hpp b/src/myx/filesystem/current_executable.hpp index 5c86a90..32d71ad 100644 --- a/src/myx/filesystem/current_executable.hpp +++ b/src/myx/filesystem/current_executable.hpp @@ -1,3 +1,8 @@ +/** + * @file current_executable.hpp + * @brief Параметры исполняемового файла + */ + #ifndef MYX_FILESYSTEM_CURRENT_EXECUTABLE_HPP_ #define MYX_FILESYSTEM_CURRENT_EXECUTABLE_HPP_ @@ -11,17 +16,34 @@ namespace filesystem { class CurrentExecutable { + /// Путь к символической ссылке, указывающей на текущий исполняемый файл QFileInfo m_procFilePath; + /// Канонический путь к текущему исполняемому файлу QFileInfo m_canonicalFilePath; - QDir m_canonicalPath; - QString m_fileName; + /// Канонический путь к каталогу с текущим исполняемым файлом + QDir m_canonicalPath; + /// Имя текущего исполняемого файла + QString m_fileName; public: + /** + * @brief Конструктор, собирающий информацию о текущем исполняемом файле. + * Иницализируются все внутренние переменные. + */ CurrentExecutable(); + /** + * @brief Канонический путь к текущему исполняемому файлу + */ QFileInfo canonicalFilePath() const; + /** + * @brief Канонический путь к каталогу с текущим исполняемым файлом + */ QDir canonicalPath() const; + /** + * @brief Имя текущего исполняемого файла + */ QString fileName() const; -}; +}; // class CurrentExecutable } // namespace filesystem diff --git a/src/myx/filesystem/paths.hpp b/src/myx/filesystem/paths.hpp index a03f0d0..2046f34 100644 --- a/src/myx/filesystem/paths.hpp +++ b/src/myx/filesystem/paths.hpp @@ -1,3 +1,8 @@ +/** + * @file paths.hpp + * @brief Стандартные пути к каталогам и файлам + */ + #ifndef MYX_FILESYSTEM_PATHS_HPP_ #define MYX_FILESYSTEM_PATHS_HPP_ @@ -13,46 +18,136 @@ namespace filesystem { class Paths { - QDir m_prefixDirectory; - QDir m_binaryDirectory; - QDir m_configDirectory; - QDir m_cacheDirectory; - QDir m_tempDirectory; - QDir m_dataDirectory; - QDir m_logDirectory; - QDir m_homeDirectory; - QString m_configFileExtension; - QString m_configFileName; + /// Путь к базовому каталогу + QDir m_prefixDirectory; + /// Путь к каталогу с исполняемым файлом + QDir m_binaryDirectory; + /// Путь к каталогу с изменяемыми файлами + QDir m_cacheDirectory; + /// Путь к каталогу с временными файлами + QDir m_tempDirectory; + /// Путь к каталогу с неизменяемыми файлами + QDir m_dataDirectory; + /// Путь к каталогу с журналами работы + QDir m_logDirectory; + /// Путь к домашнему каталогу текущего пользователя + QDir m_homeDirectory; + /// Путь к каталогу с файлами настройки + QDir m_configDirectory; + /// Полный путь к файлу настройки QFileInfo m_configFilePath; + /// Имя файла настройки + QString m_configFileName; + /// Расширение для файла настройки + QString m_configFileExtension; + /// Параметры текущего исполняемого файла CurrentExecutable m_currentExecutable; public: + /** + * @brief Конструктор + * @param configFileExtension Расширение для файла настройки + */ Paths( const QString& configFileExtension = "conf" ); + /** + * @brief Получение пути к базовому каталогу + */ QDir prefixDirectory() const; + /** + * @brief Установка пути к базовому каталогу + */ void setPrefixDirectory( const QString& prefixDirectory ); + /** + * @brief Получение пути к каталогу с исполняемым файлом + */ QDir binaryDirectory() const; + /** + * @brief Установка пути к каталогу с исполняемым файлом + */ void setBinaryDirectory( const QString& binaryDirectory ); + /** + * @brief Получение пути к каталогу с файлами настройки + */ QDir configDirectory() const; + /** + * @brief Установка пути к каталогу с файлами настройки + */ void setConfigDirectory( const QString& configDirectory ); + /** + * @brief Получение пути к каталогу с изменяемыми файлами + */ QDir cacheDirectory() const; + /** + * @brief Установка пути к каталогу с изменяемыми файлами + */ void setCacheDirectory( const QString& cacheDirectory ); + /** + * @brief Получение пути к каталогу с временными файлами + */ QDir tempDirectory() const; + /** + * @brief Установка пути к каталогу с временными файлами + */ void setTempDirectory( const QString& tempDirectory ); + /** + * @brief Получение пути к каталогу с неизменяемыми файлами + */ QDir dataDirectory() const; + /** + * @brief Установка пути к каталогу с неизменяемыми файлами + */ void setDataDirectory( const QString& dataDirectory ); + /** + * @brief Получение пути к каталогу с журналами работы + */ QDir logDirectory() const; + /** + * @brief Установка пути к каталогу с журналами работы + */ void setLogDirectory( const QString& logDirectory ); + /** + * @brief Имя исполняемого файла + */ QString executableFileName() const; - QString configFileName() const; - void setConfigFileName( const QString& configFileName ); + /** + * @brief Полный путь к исполняемому файлу + */ QFileInfo executableFilePath() const; + /** + * @brief Имя файла настройки + */ + QString configFileName() const; + /** + * @brief Установка имени файла настройки + */ + void setConfigFileName( const QString& configFileName ); + /** + * @brief Полный путь к файлу настройки + */ QFileInfo configFilePath() const; + /** + * @brief Установка полного пути к файлу настройки + */ void setConfigFilePath( const QFileInfo& configFilePath ); + /** + * @brief Обновление путей с учётом расположения исполняемого файла + */ bool updatePaths(); + /** + * @brief Создание стандартных каталогов + */ bool makeDefaultDirectories(); + /** + * @brief Поиск существующего файла настойки. + * Поиск выполняется до тех пор пока не будет найден файл в следующем порядке: + * 1. Имя файла, указанное в качестве параметра функции + * 2. Имя файла, заданное переменной окружения вида PORJECT_NAME_CONFIG + * 3. Имя файла, полученное из внутренней переменной класса + * Если файл настройки не будет найден, то будет возвращена пустая строка + */ QString findConfigFile( const QString& defaultConfigFile = "" ); }; // class Paths diff --git a/src/myx/math/units.hpp b/src/myx/math/units.hpp index 8a2e18e..c4adfa2 100644 --- a/src/myx/math/units.hpp +++ b/src/myx/math/units.hpp @@ -35,9 +35,9 @@ T degrees_to_radians( const T& degrees, typename std::enable_if< std::is_floatin /*! - * \brief decibel_to_power Перевод из децибелов в мощность - * \param degrees Значение в градусах - * \return Значение в радианах + * \brief decibel_to_power Перевод из децибелов в мощность $y = 10^{db / 10}$ + * \param db Децибелы + * \return Мощность */ template < typename T > T decibel_to_power( T const& db ) @@ -47,7 +47,11 @@ T decibel_to_power( T const& db ) } -// y = 10 * \log(x) +/*! + * \brief power_to_decibel Перевод из мощности в децибелы по формуле $y = 10 * \log(x)$ + * \param power Мощность + * \return Децибелы + */ template < typename T > T power_to_decibel( T const& power ) { @@ -56,21 +60,28 @@ T power_to_decibel( T const& power ) } -// y = 10^{x / 20} -template < typename T > -T decibel_to_magnitude( T const& value ) +/*! + * \brief decibel_to_power Перевод из децибелов в амплитуду $y = 10^{db / 20}$ + * \param db Децибелы + * \return Амплитуда + */template < typename T > +T decibel_to_magnitude( T const& db ) { static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return( std::pow( 10, value / 20.0 ) ); + return( std::pow( 10, db / 20.0 ) ); } -// y = 10^{x / 20} +/*! + * \brief magnitude_to_decibel Перевод из амплитуды в децибелы по формуле $y = 20 * \log(x)$ + * \param magnitude Амплитуда + * \return Децибелы + */ template < typename T > -T decibel_to_magnitude( T const& value ) +T magnitude_to_decibel( T const& magnitude ) { static_assert( std::is_arithmetic< T >::value, "Arithmetic type is required." ); - return( std::pow( 10, value / 20.0 ) ); + return( 20 * std::log( magnitude ) ); } } // namespace math