comparison dep/animia/src/util.cc @ 138:28842a8d0c6b

dep/animia: huge refactor (again...) but this time, it actually compiles! and it WORKS! (on win32... not sure about other platforms...) configuring players is still not supported: at some point I'll prune something up...
author Paper <mrpapersonic@gmail.com>
date Sun, 12 Nov 2023 04:53:19 -0500
parents 69db40272acd
children 8700806c2cc2
comparison
equal deleted inserted replaced
137:69db40272acd 138:28842a8d0c6b
1 #include <algorithm>
2 #include <fstream>
3 #include <sstream>
4 #include <string>
5 #include <cctype>
6
7 #include "animia/util.h"
8
9 namespace animia::internal::util {
10
11 bool ReadFile(const std::string& path, std::string& data) {
12 std::ifstream file(path.c_str(), std::ios::in | std::ios::binary);
13
14 if (!file)
15 return false;
16
17 file.seekg(0, std::ios::end);
18 data.resize(static_cast<size_t>(file.tellg()));
19 file.seekg(0, std::ios::beg);
20
21 file.read(&data.front(), data.size());
22 file.close();
23
24 return true;
25 }
26
27 bool EqualStrings(const std::string& str1, const std::string& str2) {
28 auto equal_chars = [](const char c1, const char c2) -> bool {
29 return std::tolower(static_cast<unsigned char>(c1)) == std::tolower(static_cast<unsigned char>(c2));
30 };
31
32 return str1.size() == str2.size() && std::equal(str1.begin(), str1.end(), str2.begin(), equal_chars);
33 }
34
35 bool TrimLeft(std::string& str, const char* chars) {
36 if (str.empty())
37 return false;
38
39 const auto found = str.find_first_not_of(chars);
40
41 if (found == 0)
42 return false;
43
44 if (found == std::string::npos)
45 str.clear();
46 else
47 str.erase(0, found);
48
49 return true;
50 }
51
52 bool TrimRight(std::string& str, const char* chars) {
53 if (str.empty())
54 return false;
55
56 const auto found = str.find_last_not_of(chars);
57
58 if (found == str.size() - 1)
59 return false;
60
61 if (found == std::string::npos)
62 str.clear();
63 else
64 str.resize(found + 1);
65
66 return true;
67 }
68
69 } // namespace anisthesia::detail::util