Потокобезопасная версия в отдельном классе и удаление лишних методов
This commit is contained in:
parent
df9b2ff599
commit
a39e514278
@ -3,25 +3,34 @@
|
|||||||
#include <myx/base/config.hpp>
|
#include <myx/base/config.hpp>
|
||||||
|
|
||||||
#include <myx/filesystem/paths.hpp>
|
#include <myx/filesystem/paths.hpp>
|
||||||
|
#include <myx/filesystem/paths_mt.hpp>
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
namespace MF = myx::filesystem;
|
namespace MF = myx::filesystem;
|
||||||
|
|
||||||
// Переменные для защиты экземпляра класса MF::Paths
|
// Переменные для защиты экземпляра класса MF::PathsMT
|
||||||
std::atomic< MF::Paths* > MF::Paths::mInstance;
|
std::atomic< MF::PathsMT* > MF::PathsMT::mInstance;
|
||||||
std::mutex MF::Paths::mMutex;
|
std::mutex MF::PathsMT::mMutex;
|
||||||
|
|
||||||
int main( int argc, char** argv )
|
int main( int argc, char** argv )
|
||||||
{
|
{
|
||||||
(void)argc;
|
(void)argc;
|
||||||
(void)argv;
|
(void)argv;
|
||||||
QCoreApplication::setApplicationName( QStringLiteral( CMLIB_PROJECT_NAME ) );
|
QCoreApplication::setApplicationName( QStringLiteral( CMLIB_PROJECT_NAME ) );
|
||||||
MF::Paths* paths = MF::Paths::getInstance();
|
MF::PathsMT* pathsMT = MF::PathsMT::instance();
|
||||||
|
MF::Paths* paths = MF::Paths::instance();
|
||||||
|
|
||||||
|
pathsMT->init( QStringLiteral( CMLIB_PROJECT_NAME ), QStringLiteral( "conf" ) );
|
||||||
|
pathsMT->findConfigFile( QStringLiteral( "test" ) );
|
||||||
|
qDebug() << pathsMT->systemLogDirectory();
|
||||||
|
qDebug() << pathsMT->systemConfigDirectory();
|
||||||
|
|
||||||
paths->init( QStringLiteral( CMLIB_PROJECT_NAME ), QStringLiteral( "conf" ) );
|
paths->init( QStringLiteral( CMLIB_PROJECT_NAME ), QStringLiteral( "conf" ) );
|
||||||
paths->makeDefaultDirectories();
|
|
||||||
paths->findConfigFile( QStringLiteral( "test" ) );
|
paths->findConfigFile( QStringLiteral( "test" ) );
|
||||||
|
qDebug() << paths->systemConstDataDirectory();
|
||||||
|
qDebug() << paths->configFileName();
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,14 @@ set(current_target filesystem)
|
|||||||
set(current_target_sources
|
set(current_target_sources
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/current_executable.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/current_executable.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/paths.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/paths.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/paths_mt.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Список заголовочных файлов (используется для установки)
|
# Список заголовочных файлов (используется для установки)
|
||||||
set(current_target_headers
|
set(current_target_headers
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/current_executable.hpp
|
${CMAKE_CURRENT_SOURCE_DIR}/current_executable.hpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/paths.hpp
|
${CMAKE_CURRENT_SOURCE_DIR}/paths.hpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/paths_mt.hpp
|
||||||
)
|
)
|
||||||
|
|
||||||
add_common_library(TARGET ${current_target}
|
add_common_library(TARGET ${current_target}
|
||||||
|
@ -13,23 +13,6 @@ namespace filesystem {
|
|||||||
|
|
||||||
Paths::Paths() = default;
|
Paths::Paths() = default;
|
||||||
|
|
||||||
Paths* Paths::getInstance()
|
|
||||||
{
|
|
||||||
volatile Paths* localInstance = mInstance.load( std::memory_order_acquire );
|
|
||||||
if ( localInstance == nullptr )
|
|
||||||
{
|
|
||||||
std::lock_guard< std::mutex > myLock( mMutex );
|
|
||||||
localInstance = mInstance.load( std::memory_order_relaxed );
|
|
||||||
if ( localInstance == nullptr ) // -V1036
|
|
||||||
{
|
|
||||||
localInstance = new Paths();
|
|
||||||
mInstance.store( const_cast< Paths* >( localInstance ), std::memory_order_release ); // NOLINT
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return( const_cast< Paths* >( localInstance ) ); // NOLINT
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Paths::HierarchyType Paths::getHierarchyType()
|
Paths::HierarchyType Paths::getHierarchyType()
|
||||||
{
|
{
|
||||||
QRegExp binRegexp( "/s*bin$" );
|
QRegExp binRegexp( "/s*bin$" );
|
||||||
@ -143,7 +126,7 @@ bool Paths::init( const QString& projectDir, const QString& configFileExtension
|
|||||||
|
|
||||||
m_homeDirectory = QString::fromLocal8Bit( qgetenv( "HOME" ) );
|
m_homeDirectory = QString::fromLocal8Bit( qgetenv( "HOME" ) );
|
||||||
m_tempDirectory = QString::fromLocal8Bit( qgetenv( "TMPDIR" ) );
|
m_tempDirectory = QString::fromLocal8Bit( qgetenv( "TMPDIR" ) );
|
||||||
if ( m_tempDirectory.canonicalPath().isEmpty() || ( m_tempDirectory.path() == QStringLiteral( "." ) ) )
|
if ( m_tempDirectory.isEmpty() || ( m_tempDirectory.path() == QStringLiteral( "." ) ) )
|
||||||
{
|
{
|
||||||
m_tempDirectory = QStringLiteral( _PATH_TMP );
|
m_tempDirectory = QStringLiteral( _PATH_TMP );
|
||||||
}
|
}
|
||||||
@ -230,162 +213,84 @@ const QDir& Paths::userConfigDirectory() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setUserConfigDirectory( const QString& userConfigDirectory )
|
|
||||||
{
|
|
||||||
m_userConfigDirectory = userConfigDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::systemConfigDirectory() const
|
const QDir& Paths::systemConfigDirectory() const
|
||||||
{
|
{
|
||||||
return( m_systemConfigDirectory );
|
return( m_systemConfigDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setSystemConfigDirectory( const QString& systemConfigDirectory )
|
|
||||||
{
|
|
||||||
m_systemConfigDirectory = systemConfigDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QFileInfo& Paths::configFilePath() const
|
const QFileInfo& Paths::configFilePath() const
|
||||||
{
|
{
|
||||||
return( m_configFilePath );
|
return( m_configFilePath );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setConfigFilePath( const QFileInfo& configFilePath )
|
|
||||||
{
|
|
||||||
m_configFilePath = configFilePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QString& Paths::configFileName() const
|
const QString& Paths::configFileName() const
|
||||||
{
|
{
|
||||||
return( m_configFileName );
|
return( m_configFileName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setConfigFileName( const QString& configFileName )
|
|
||||||
{
|
|
||||||
m_configFileName = configFileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QString& Paths::configFileExtension() const
|
const QString& Paths::configFileExtension() const
|
||||||
{
|
{
|
||||||
return( m_configFileExtension );
|
return( m_configFileExtension );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setConfigFileExtension( const QString& configFileExtension )
|
|
||||||
{
|
|
||||||
m_configFileExtension = configFileExtension;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::userVarDataDirectory() const
|
const QDir& Paths::userVarDataDirectory() const
|
||||||
{
|
{
|
||||||
return( m_userVarDataDirectory );
|
return( m_userVarDataDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setUserVarDataDirectory( const QString& userVarDataDirectory )
|
|
||||||
{
|
|
||||||
m_userVarDataDirectory = userVarDataDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::systemVarDataDirectory() const
|
const QDir& Paths::systemVarDataDirectory() const
|
||||||
{
|
{
|
||||||
return( m_systemVarDataDirectory );
|
return( m_systemVarDataDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setSystemVarDataDirectory( const QString& systemVarDataDirectory )
|
|
||||||
{
|
|
||||||
m_systemVarDataDirectory = systemVarDataDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::userConstDataDirectory() const
|
const QDir& Paths::userConstDataDirectory() const
|
||||||
{
|
{
|
||||||
return( m_userConstDataDirectory );
|
return( m_userConstDataDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setUserConstDataDirectory( const QString& userConstDataDirectory )
|
|
||||||
{
|
|
||||||
m_userConstDataDirectory = userConstDataDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::systemConstDataDirectory() const
|
const QDir& Paths::systemConstDataDirectory() const
|
||||||
{
|
{
|
||||||
return( m_systemConstDataDirectory );
|
return( m_systemConstDataDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setSystemConstDataDirectory( const QString& systemConstDataDirectory )
|
|
||||||
{
|
|
||||||
m_systemConstDataDirectory = systemConstDataDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::userLogDirectory() const
|
const QDir& Paths::userLogDirectory() const
|
||||||
{
|
{
|
||||||
return( m_userLogDirectory );
|
return( m_userLogDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setUserLogDirectory( const QString& userLogDirectory )
|
|
||||||
{
|
|
||||||
m_userLogDirectory = userLogDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::systemLogDirectory() const
|
const QDir& Paths::systemLogDirectory() const
|
||||||
{
|
{
|
||||||
return( m_systemLogDirectory );
|
return( m_systemLogDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setSystemLogDirectory( const QString& systemLogDirectory )
|
|
||||||
{
|
|
||||||
m_systemLogDirectory = systemLogDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::tempDirectory() const
|
const QDir& Paths::tempDirectory() const
|
||||||
{
|
{
|
||||||
return( m_tempDirectory );
|
return( m_tempDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setTempDirectory( const QString& tempDirectory )
|
|
||||||
{
|
|
||||||
m_tempDirectory = tempDirectory;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const QDir& Paths::homeDirectory() const
|
const QDir& Paths::homeDirectory() const
|
||||||
{
|
{
|
||||||
return( m_homeDirectory );
|
return( m_homeDirectory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const QString& Paths::projectDirectoryName() const
|
const QString& Paths::projectName() const
|
||||||
{
|
{
|
||||||
return( m_projectName );
|
return( m_projectName );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Paths::setProjectDirectoryName( const QString& projectDirectoryName )
|
|
||||||
{
|
|
||||||
m_projectName = projectDirectoryName;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QString Paths::executableFileName() const
|
QString Paths::executableFileName() const
|
||||||
{
|
{
|
||||||
return( m_currentExecutable.m_canonicalFilePath.fileName() );
|
return( m_currentExecutable.m_canonicalFilePath.fileName() );
|
||||||
|
@ -14,15 +14,11 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
|
||||||
#include <atomic>
|
|
||||||
#include <future>
|
|
||||||
#include <mutex>
|
|
||||||
#include <thread>
|
|
||||||
|
|
||||||
namespace myx {
|
namespace myx {
|
||||||
|
|
||||||
namespace filesystem {
|
namespace filesystem {
|
||||||
|
|
||||||
|
/// @brief Класс, предоставляющий методы для получения стандартных путей к каталогам и файлам
|
||||||
class Paths
|
class Paths
|
||||||
{
|
{
|
||||||
enum class HierarchyType : intptr_t
|
enum class HierarchyType : intptr_t
|
||||||
@ -76,22 +72,25 @@ class Paths
|
|||||||
/// @brief Расширение для файла настройки
|
/// @brief Расширение для файла настройки
|
||||||
QString m_configFileExtension;
|
QString m_configFileExtension;
|
||||||
|
|
||||||
|
HierarchyType getHierarchyType();
|
||||||
|
|
||||||
|
protected:
|
||||||
Paths();
|
Paths();
|
||||||
~Paths() = default;
|
~Paths() = default;
|
||||||
Paths( const Paths& ) = delete;
|
Paths( const Paths& ) = delete;
|
||||||
Paths& operator=( const Paths& ) = delete;
|
Paths& operator=( const Paths& ) = delete;
|
||||||
|
|
||||||
HierarchyType getHierarchyType();
|
|
||||||
|
|
||||||
static std::atomic< Paths* > mInstance;
|
|
||||||
static std::mutex mMutex;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief getInstance
|
* @brief getInstance
|
||||||
* @return Уникальный экземпляр класса Paths
|
* @return Уникальный экземпляр класса Paths
|
||||||
*/
|
*/
|
||||||
static Paths* getInstance();
|
static Paths* instance()
|
||||||
|
{
|
||||||
|
static Paths p;
|
||||||
|
return( &p );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Обновление путей с учётом расположения исполняемого файла
|
* @brief Обновление путей с учётом расположения исполняемого файла
|
||||||
@ -137,28 +136,16 @@ public:
|
|||||||
* @brief Полный путь к файлу настройки
|
* @brief Полный путь к файлу настройки
|
||||||
*/
|
*/
|
||||||
const QFileInfo& configFilePath() const;
|
const QFileInfo& configFilePath() const;
|
||||||
/**
|
|
||||||
* @brief Установка полного пути к файлу настройки
|
|
||||||
*/
|
|
||||||
void setConfigFilePath( const QFileInfo& configFilePath );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Имя файла настройки
|
* @brief Имя файла настройки
|
||||||
*/
|
*/
|
||||||
const QString& configFileName() const;
|
const QString& configFileName() const;
|
||||||
/**
|
|
||||||
* @brief Установка имени файла настройки
|
|
||||||
*/
|
|
||||||
void setConfigFileName( const QString& configFileName );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Расширение у файла настройки
|
* @brief Расширение у файла настройки
|
||||||
*/
|
*/
|
||||||
const QString& configFileExtension() const;
|
const QString& configFileExtension() const;
|
||||||
/**
|
|
||||||
* @brief Установка расширения у файла настройки
|
|
||||||
*/
|
|
||||||
void setConfigFileExtension( const QString& configFileExtension );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Получение пути к пользовательскому каталогу с изменяемыми файлами
|
* @brief Получение пути к пользовательскому каталогу с изменяемыми файлами
|
||||||
@ -203,7 +190,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @brief Имя подкаталога для проекта
|
* @brief Имя подкаталога для проекта
|
||||||
*/
|
*/
|
||||||
const QString& projectDirectoryName() const;
|
const QString& projectName() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Имя исполняемого файла
|
* @brief Имя исполняемого файла
|
||||||
@ -214,67 +201,6 @@ public:
|
|||||||
* @brief Полный путь к исполняемому файлу
|
* @brief Полный путь к исполняемому файлу
|
||||||
*/
|
*/
|
||||||
const QFileInfo& executableFilePath() const;
|
const QFileInfo& executableFilePath() const;
|
||||||
|
|
||||||
private:
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к базовому каталогу
|
|
||||||
*/
|
|
||||||
void setPrefixDirectory( const QString& prefixDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к каталогу с исполняемым файлом
|
|
||||||
*/
|
|
||||||
void setBinaryDirectory( const QString& binaryDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к пользовательскому каталогу с файлами настройки
|
|
||||||
*/
|
|
||||||
void setUserConfigDirectory( const QString& userConfigDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к системному каталогу с файлами настройки
|
|
||||||
*/
|
|
||||||
void setSystemConfigDirectory( const QString& systemConfigDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к пользовательскому каталогу с изменяемыми файлами
|
|
||||||
*/
|
|
||||||
void setUserVarDataDirectory( const QString& userVarDataDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к системному каталогу с изменяемыми файлами
|
|
||||||
*/
|
|
||||||
void setSystemVarDataDirectory( const QString& systemVarDataDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к пользовательскому каталогу с неизменяемыми файлами
|
|
||||||
*/
|
|
||||||
void setUserConstDataDirectory( const QString& userConstDataDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к системному каталогу с неизменяемыми файлами
|
|
||||||
*/
|
|
||||||
void setSystemConstDataDirectory( const QString& systemConstDataDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к пользовательскому каталогу с журналами работы
|
|
||||||
*/
|
|
||||||
void setUserLogDirectory( const QString& userLogDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к системному каталогу с журналами работы
|
|
||||||
*/
|
|
||||||
void setSystemLogDirectory( const QString& systemLogDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка пути к каталогу с временными файлами
|
|
||||||
*/
|
|
||||||
void setTempDirectory( const QString& tempDirectory );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка имени подкаталога для проекта
|
|
||||||
*/
|
|
||||||
void setProjectDirectoryName( const QString& projectDirectoryName );
|
|
||||||
}; // class Paths
|
}; // class Paths
|
||||||
|
|
||||||
} // namespace filesystem
|
} // namespace filesystem
|
||||||
|
Loading…
Reference in New Issue
Block a user