PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
IOUtilities.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __GEDIM_IOUtilities_H
13#define __GEDIM_IOUtilities_H
14
15#include "Gedim_Macro.hpp"
16#include <unordered_set>
17
18#if USE_MPI == 1
19#include <mpi.h>
20#endif
21
22#include <cstdarg>
23#include <iostream>
24#include <list>
25#include <map>
26#include <set>
27#include <sstream>
28#include <unordered_map>
29#include <vector>
30
31namespace Gedim
32{
33class Output;
34class Profiler;
35class LogFile;
36
38class Output
39{
40 public:
47
48 static std::string BlueColor;
49 static std::string RedColor;
50 static std::string GreenColor;
51 static std::string YellowColor;
52 static std::string MagentaColor;
53 static std::string EndColor;
54
55 static int MaxElementToPrint;
57
59 static void CreateFolder(const std::string &nameFolder);
61 static std::vector<std::string> StringSplit(const std::string &stringToSplit, const char character);
63 static bool FileExists(const std::string &nameFile);
65 static void GetFilePath(const std::string &nameFilePath, std::string &filePath, std::string &fileName, std::string &fileExtension);
67 static void GetFileList(const std::string &mainDirectory,
68 std::vector<std::string> &out,
70 const bool &hiddenElements = false);
72 static void FindPaths(const std::string &mainDirectory,
73 const std::string &objectNameToFind,
74 std::vector<std::string> &paths,
76 const bool &hiddenElements = false);
77
78 static void GetBinaryFileSize(const std::string &nameFile,
79 unsigned int &fileSize,
80 const unsigned int &sizeOfSingleDataToWrite,
81 const unsigned int &startingPosition = 0);
82 static void ReadBinaryFile(const std::string &nameFile,
83 void *dataToRead,
84 const unsigned int &sizeOfSingleDataToWrite,
85 const unsigned int &dataSizeToRead,
86 const unsigned int &startingPosition = 0);
87 static bool ReadBinaryFile(const std::string &nameFile,
88 std::vector<double> &dataToRead,
89 const unsigned int &dataSizeToRead = 0,
90 const unsigned int &startingPosition = 0);
91 static void WriteBinaryFile(const std::string &nameFile,
92 const void *dataToWrite,
93 const unsigned int &sizeOfSingleDataToWrite,
94 const unsigned int &dataSizeToWrite,
95 const bool &append = false);
96 static bool WriteBinaryFile(const std::string &nameFile,
97 const std::vector<double> &dataToWrite,
98 const unsigned int &dataSizeToWrite = 0,
99 const unsigned int &dataStartingPositionToWrite = 0,
100 const bool &append = false);
101
103 static void PrintLine(char character = ' ', bool onlyMaster = true);
104
106 static std::ostream &PrintStars(std::ostream &out);
108 static std::ostream &PrintLines(std::ostream &out);
109
111 static void PrintStatusProgram(const std::string &programStep, ...);
113 static void PrintGenericMessageOnLine(const std::string &message, ...);
115 static void PrintGenericMessage(const std::string &message, const bool &onlyMaster, ...);
117 static void PrintErrorMessage(const std::string &message, const bool &onlyMaster, ...);
119 static void PrintWarningMessage(const std::string &message, const bool &onlyMaster, ...);
121 static void PrintDebugMessage(const std::string &message, const bool &onlyMaster, ...);
123 static void PrintSuccessMessage(const std::string &message, const bool &onlyMaster, ...);
124
126 inline static void Assert(const bool &logicResult)
127 {
128 if (!logicResult)
129 abort();
130 }
131
133 static void Assert(const bool &logicResult, const std::string &message, ...);
134};
135
137{
138 private:
139 static std::string GetDateTime();
140 static void PrintMessage(const std::string &type, const std::string &message, va_list args);
141
142 public:
143 static int LogMaxFileSize;
144 static int LogMaxNumFiles;
145 static std::string LogFolder;
146 static std::string LogNameFile;
147
148 static void PrintLine(const char &symbol = ' ');
149 static void PrintWarningMessage(const std::string &message, va_list args);
150 static void PrintErrorMessage(const std::string &message, va_list args);
151 static void PrintInfoMessage(const std::string &message, va_list args);
152 static void PrintDebugMessage(const std::string &message, va_list args);
153
155 static void CheckFileSize(const std::string &nameFile);
157 static double GetFileSize(const std::string &nameFile);
158};
159
161{
162 private:
163 static std::map<std::string, double> times;
164 static std::map<std::string, double> localTimes;
165 static unsigned long totalAvailStartingMemory;
166 static int ParseLine(char *line);
167
168 public:
169 static bool ActivateProfiler;
170 static std::string TimeFile;
171 static std::string MemoryFile;
172
173 static double GetTime(const std::string &nameTime, const bool &localTime = false);
175 static double GetTime();
176 static double ComputeTime(const double &startTime, const double &stopTime)
177 {
178#if USE_MPI == 1
179 return stopTime - startTime;
180#elif USE_MPI == 0
182#endif // USE_MPI
183 }
184
187 static void GetTotalMemory(std::vector<unsigned long> &totalMemory);
188
191 static void GetProcessMemory(std::vector<unsigned long> &memoryUsed);
192
196 static void CheckMemory(const std::string &nameMemory, const bool &checkProcessesMemory = false);
197
199 static void Sleep(const unsigned int &milliseconds);
200
202 static void StartTime(const std::string &nameTime);
204 static void InsertTime(const std::string &nameTime, const double &globalTime, const double &localTime);
206 static void SplitTime(const std::string &nameTime, double &globalTime, double &localTime);
208 static double StopTime(const std::string &nameTime, const bool &printTime = true);
209
210 static void WriteTime(const std::string &nameTime, const double &globalTime, const double &localTime);
211};
212
213} // namespace Gedim
214
215#endif
Eigen column vector.
Definition Eigen_Array.hpp:23
Definition IOUtilities.hpp:137
static double GetFileSize(const std::string &nameFile)
Get the file size in MB.
Definition IOUtilities.cpp:766
static int LogMaxFileSize
Max file log size (MB)
Definition IOUtilities.hpp:143
static void CheckFileSize(const std::string &nameFile)
Check if file reach the maximum size and create new file.
Definition IOUtilities.cpp:779
static void PrintErrorMessage(const std::string &message, va_list args)
Definition IOUtilities.cpp:874
static void PrintInfoMessage(const std::string &message, va_list args)
Definition IOUtilities.cpp:879
static void PrintWarningMessage(const std::string &message, va_list args)
Definition IOUtilities.cpp:869
static void PrintDebugMessage(const std::string &message, va_list args)
Definition IOUtilities.cpp:884
static void PrintLine(const char &symbol=' ')
Definition IOUtilities.cpp:858
static int LogMaxNumFiles
Max number of backup log files to maintain.
Definition IOUtilities.hpp:144
static std::string LogFolder
Folder name where log files of the program are.
Definition IOUtilities.hpp:145
static std::string LogNameFile
File name of Log.
Definition IOUtilities.hpp:146
Class to print variables.
Definition IOUtilities.hpp:39
static void PrintDebugMessage(const std::string &message, const bool &onlyMaster,...)
Used to print to file, or on screen a debug message.
Definition IOUtilities.cpp:642
static void PrintWarningMessage(const std::string &message, const bool &onlyMaster,...)
Used to print to file, or on screen a warning message.
Definition IOUtilities.cpp:579
static std::string EndColor
Definition IOUtilities.hpp:53
static std::vector< std::string > StringSplit(const std::string &stringToSplit, const char character)
Split a std::string in more strings dived by character.
Definition IOUtilities.cpp:109
static void Assert(const bool &logicResult)
Assert for all code, generate exception if something goes wrong.
Definition IOUtilities.hpp:126
static void GetFilePath(const std::string &nameFilePath, std::string &filePath, std::string &fileName, std::string &fileExtension)
Get the path from a file path.
Definition IOUtilities.cpp:136
static void PrintGenericMessageOnLine(const std::string &message,...)
Used to print only on screen a generic message in the same line.
Definition IOUtilities.cpp:524
static void PrintSuccessMessage(const std::string &message, const bool &onlyMaster,...)
Used to print to file, or on screen a success message.
Definition IOUtilities.cpp:674
static std::string YellowColor
Definition IOUtilities.hpp:51
static void GetFileList(const std::string &mainDirectory, std::vector< std::string > &out, const FileFilter &filter=Output::FilesAndDirectories, const bool &hiddenElements=false)
Returns a list of files/directories in mainDirectory.
Definition IOUtilities.cpp:157
static bool ReadBinaryFile(const std::string &nameFile, std::vector< double > &dataToRead, const unsigned int &dataSizeToRead=0, const unsigned int &startingPosition=0)
static std::string MagentaColor
Definition IOUtilities.hpp:52
static void FindPaths(const std::string &mainDirectory, const std::string &objectNameToFind, std::vector< std::string > &paths, const FileFilter &filter=Output::FilesAndDirectories, const bool &hiddenElements=false)
Returns a list of paths containing the file/directory found in mainDirectory.
Definition IOUtilities.cpp:230
static void WriteBinaryFile(const std::string &nameFile, const void *dataToWrite, const unsigned int &sizeOfSingleDataToWrite, const unsigned int &dataSizeToWrite, const bool &append=false)
static std::string RedColor
Definition IOUtilities.hpp:49
static int MaxElementToPrint
Max elements to print in vectors.
Definition IOUtilities.hpp:55
static std::string BlueColor
Definition IOUtilities.hpp:48
static void PrintGenericMessage(const std::string &message, const bool &onlyMaster,...)
Used to print to file, or on screen a generic message.
Definition IOUtilities.cpp:609
static std::string GreenColor
Definition IOUtilities.hpp:50
static std::ostream & PrintStars(std::ostream &out)
Print a line of stars * in out.
Definition IOUtilities.cpp:474
static int StartingIndexToPrint
Starting index to print in vectors.
Definition IOUtilities.hpp:56
static void PrintErrorMessage(const std::string &message, const bool &onlyMaster,...)
Used to print to file, or on screen an error message.
Definition IOUtilities.cpp:549
static bool FileExists(const std::string &nameFile)
Check if a file exists.
Definition IOUtilities.cpp:121
FileFilter
Definition IOUtilities.hpp:42
@ FilesAndDirectories
Definition IOUtilities.hpp:43
@ Files
Definition IOUtilities.hpp:44
@ Directories
Definition IOUtilities.hpp:45
static void Assert(const bool &logicResult, const std::string &message,...)
Assert for all code, generate exception if something goes wrong with a message.
static void PrintStatusProgram(const std::string &programStep,...)
Used to print to file, or on screen the status of the program.
Definition IOUtilities.cpp:492
static std::ostream & PrintLines(std::ostream &out)
Print a line of lines - in out.
Definition IOUtilities.cpp:483
static bool WriteBinaryFile(const std::string &nameFile, const std::vector< double > &dataToWrite, const unsigned int &dataSizeToWrite=0, const unsigned int &dataStartingPositionToWrite=0, const bool &append=false)
static void PrintLine(char character=' ', bool onlyMaster=true)
Print a line of symbol.
Definition IOUtilities.cpp:453
static void GetBinaryFileSize(const std::string &nameFile, unsigned int &fileSize, const unsigned int &sizeOfSingleDataToWrite, const unsigned int &startingPosition=0)
Definition IOUtilities.cpp:279
static void CreateFolder(const std::string &nameFolder)
Creating Folders if not exists.
Definition IOUtilities.cpp:87
static void ReadBinaryFile(const std::string &nameFile, void *dataToRead, const unsigned int &sizeOfSingleDataToWrite, const unsigned int &dataSizeToRead, const unsigned int &startingPosition=0)
Definition IOUtilities.hpp:161
static double ComputeTime(const double &startTime, const double &stopTime)
Definition IOUtilities.hpp:176
static void Sleep(const unsigned int &milliseconds)
Sleep for n milliseconds.
Definition IOUtilities.cpp:928
static void GetProcessMemory(std::vector< unsigned long > &memoryUsed)
Get Current Virtual/Physical Memory used by process (KB)
Definition IOUtilities.cpp:1130
static void GetTotalMemory(std::vector< unsigned long > &totalMemory)
Get Total Physical Memory from file /proc/meminfo (KB)
Definition IOUtilities.cpp:1153
static double GetTime(const std::string &nameTime, const bool &localTime=false)
static std::string MemoryFile
File where memory profiling data are stored.
Definition IOUtilities.hpp:171
static std::string TimeFile
File where time profiling data are stored.
Definition IOUtilities.hpp:170
static double StopTime(const std::string &nameTime, const bool &printTime=true)
Stop time with nameTime if exists and print to file the result.
Definition IOUtilities.cpp:1014
static double GetTime()
Get time in ms.
Definition IOUtilities.cpp:919
static void CheckMemory(const std::string &nameMemory, const bool &checkProcessesMemory=false)
Compute the virtual memory used by the process.
Definition IOUtilities.cpp:1179
static void WriteTime(const std::string &nameTime, const double &globalTime, const double &localTime)
Definition IOUtilities.cpp:1056
static void InsertTime(const std::string &nameTime, const double &globalTime, const double &localTime)
Insert time with nameTime if not exist.
Definition IOUtilities.cpp:966
static void SplitTime(const std::string &nameTime, double &globalTime, double &localTime)
Split time with nameTime if exists and return the global time and local time.
Definition IOUtilities.cpp:982
static bool ActivateProfiler
Compute time for program profiling.
Definition IOUtilities.hpp:169
static void StartTime(const std::string &nameTime)
Start time with nameTime if not exist.
Definition IOUtilities.cpp:937
Definition Eigen_Array.cpp:22