Porytiles
Loading...
Searching...
No Matches
utilities.cpp
Go to the documentation of this file.
2
3#include <algorithm>
4#include <filesystem>
5#include <fstream>
6#include <iostream>
7#include <random>
8#include <regex>
9#include <sstream>
10#include <stdexcept>
11#include <string>
12
14
15namespace porytiles {
16
17std::vector<std::string> split(std::string input, const std::string &delimiter) {
18 std::vector<std::string> result;
19 size_t pos;
20 std::string token;
21 while ((pos = input.find(delimiter)) != std::string::npos) {
22 token = input.substr(0, pos);
23 result.push_back(token);
24 input.erase(0, pos + delimiter.length());
25 }
26 result.push_back(input);
27 return result;
28}
29
30bool checkFullStringMatch(const std::string &str, const std::string &pattern) {
31 try {
32 const std::regex re{pattern};
33 return std::regex_match(str, re);
34 } catch (const std::regex_error &e) {
35 throw std::runtime_error{e.what()};
36 }
37}
38
39void trim(std::string &string) {
40 string.erase(string.begin(),
41 std::find_if(string.begin(), string.end(), [](unsigned char ch) { return !std::isspace(ch); }));
42 string.erase(
43 std::find_if(string.rbegin(), string.rend(), [](unsigned char ch) { return !std::isspace(ch); }).base(),
44 string.end());
45}
46
47std::filesystem::path getTmpfilePath(const std::filesystem::path &parentDir, const std::string &fileName) {
48 return std::filesystem::temp_directory_path() / parentDir / fileName;
49}
50
51std::filesystem::path createTmpdir() {
52 int maxTries = 1000;
53 auto tmpDir = std::filesystem::temp_directory_path();
54 int i = 0;
55 std::random_device randomDevice;
56 std::mt19937 mersennePrng(randomDevice());
57 std::uniform_int_distribution<uint64_t> uniformIntDistribution(0);
58 std::filesystem::path path;
59 while (true) {
60 std::stringstream stringStream;
61 stringStream << std::hex << uniformIntDistribution(mersennePrng);
62 path = tmpDir / ("porytiles_" + stringStream.str());
63 if (std::filesystem::create_directory(path)) {
64 break;
65 }
66 if (i == maxTries) {
67 Panic("tmpfiles::createTmpdir getTmpdirPath took too many tries");
68 }
69 i++;
70 }
71 return path;
72}
73
74std::string palIndexToFileName(std::size_t index) {
75 std::string file = std::to_string(index) + ".png";
76 if (index < 10) {
77 file = "0" + file;
78 }
79 return file;
80}
81
82} // namespace porytiles
void Panic(const StringViewSourceLoc &s) noexcept
Definition panic.hpp:31
bool checkFullStringMatch(const std::string &str, const std::string &pattern)
Definition utilities.cpp:30
std::filesystem::path getTmpfilePath(const std::filesystem::path &parentDir, const std::string &fileName)
Definition utilities.cpp:47
std::filesystem::path createTmpdir()
Definition utilities.cpp:51
std::string palIndexToFileName(std::size_t index)
Definition utilities.cpp:74
std::vector< std::string > split(std::string input, const std::string &delimiter)
Definition utilities.cpp:17
void trim(std::string &string)
Definition utilities.cpp:39