Visual Servoing Platform  version 3.4.1 under development (2021-12-05)
vpIoTools.h
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Directory management.
33  *
34  * Authors:
35  * Fabien Spindler
36  *
37  *****************************************************************************/
38 
39 #ifndef vpIoTools_HH
40 #define vpIoTools_HH
41 
47 #include <visp3/core/vpConfig.h>
48 
49 #include <iostream>
50 #include <sstream>
51 #include <stdlib.h>
52 #include <string>
53 #include <vector>
54 #include <visp3/core/vpColor.h>
55 #include <stdint.h> //for uint32_t related types ; works also with >= VS2010 / _MSC_VER >= 1600
56 
158 class VISP_EXPORT vpIoTools
159 {
160 
161 public:
162  static const std::string &getBuildInformation();
163  static void getUserName(std::string &username);
164  static std::string getUserName();
165  static std::string getenv(const std::string &env);
166  static std::string getViSPImagesDataPath();
167  static void getVersion(const std::string &version, unsigned int &major, unsigned int &minor, unsigned int &patch);
168  static bool checkDirectory(const std::string &dirname);
169  static bool checkFifo(const std::string &filename);
170  static bool checkFilename(const std::string &filename);
171  static bool copy(const std::string &src, const std::string &dst);
172 
173  static void makeDirectory(const std::string &dirname);
174  static void makeFifo(const std::string &dirname);
175  static std::string makeTempDirectory(const std::string &dirname);
176  static std::string path(const std::string &pathname);
177 
178  static bool remove(const std::string &filename);
179  static bool rename(const std::string &oldfilename, const std::string &newfilename);
180 
185  static const char separator =
186 #if defined(_WIN32)
187  '\\';
188 #else
189  '/';
190 #endif
191 
192  static std::string getAbsolutePathname(const std::string &pathname);
193  static std::string getFileExtension(const std::string &pathname, bool checkFile = false);
194  static std::string getName(const std::string &pathname);
195  static std::string getNameWE(const std::string &pathname);
196  static std::string getParent(const std::string &pathname);
197  static std::string createFilePath(const std::string &parent, const std::string &child);
198  static bool isAbsolutePathname(const std::string &pathname);
199  static bool isSamePathname(const std::string &pathname1, const std::string &pathname2);
200  static std::pair<std::string, std::string> splitDrive(const std::string &pathname);
201  static std::vector<std::string> splitChain(const std::string &chain, const std::string &sep);
202  static std::vector<std::string> getDirFiles(const std::string &dirname);
203 
208  // read configuration file
209  static bool loadConfigFile(const std::string &confFile);
210  static bool readConfigVar(const std::string &var, float &value);
211  static bool readConfigVar(const std::string &var, double &value);
212  static bool readConfigVar(const std::string &var, int &value);
213  static bool readConfigVar(const std::string &var, unsigned int &value);
214  static bool readConfigVar(const std::string &var, bool &value);
215  static bool readConfigVar(const std::string &var, std::string &value);
216  static bool readConfigVar(const std::string &var, vpColor &value);
217  static bool readConfigVar(const std::string &var, vpArray2D<double> &value, const unsigned int &nCols = 0,
218  const unsigned int &nRows = 0);
219 
220  // construct experiment filename & path
221  static void setBaseName(const std::string &s);
222  static void setBaseDir(const std::string &dir);
223  static void addNameElement(const std::string &strTrue, const bool &cond = true, const std::string &strFalse = "");
224  static void addNameElement(const std::string &strTrue, const double &val);
225  static std::string getBaseName();
226  static std::string getFullName();
227 
228  // write files
229  static void saveConfigFile(const bool &actuallySave = true);
230  static void createBaseNamePath(const bool &empty = false);
232 
233  static void readBinaryValueLE(std::ifstream &file, int16_t &short_value);
234  static void readBinaryValueLE(std::ifstream &file, uint16_t &ushort_value);
235  static void readBinaryValueLE(std::ifstream &file, int32_t &int_value);
236  static void readBinaryValueLE(std::ifstream &file, uint32_t &int_value);
237  static void readBinaryValueLE(std::ifstream &file, float &float_value);
238  static void readBinaryValueLE(std::ifstream &file, double &double_value);
239 
240  static void writeBinaryValueLE(std::ofstream &file, const int16_t short_value);
241  static void writeBinaryValueLE(std::ofstream &file, const uint16_t ushort_value);
242  static void writeBinaryValueLE(std::ofstream &file, const int32_t int_value);
243  static void writeBinaryValueLE(std::ofstream &file, const uint32_t int_value);
244  static void writeBinaryValueLE(std::ofstream &file, float float_value);
245  static void writeBinaryValueLE(std::ofstream &file, double double_value);
246 
247  static bool parseBoolean(std::string input);
248  static std::string trim(std::string s);
249 
250 protected:
251  static std::string baseName;
252  static std::string baseDir;
253  static std::string configFile;
254  static std::vector<std::string> configVars;
255  static std::vector<std::string> configValues;
256 
257 #ifndef DOXYGEN_SHOULD_SKIP_THIS
258  static int mkdir_p(const char *path, int mode);
259 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
260 };
261 #endif
File and directories basic tools.
Definition: vpIoTools.h:158
Class to define RGB colors available for display functionnalities.
Definition: vpColor.h:157
static std::string baseDir
Definition: vpIoTools.h:252
static std::vector< std::string > configVars
Definition: vpIoTools.h:254
static std::string baseName
Definition: vpIoTools.h:251
static std::string configFile
Definition: vpIoTools.h:253
static std::vector< std::string > configValues
Definition: vpIoTools.h:255