forked from pytorch/pytorch
-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.h
67 lines (61 loc) · 1.55 KB
/
utils.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#pragma once
#include <fstream>
#include "caffe2/core/logging.h"
namespace caffe2 {
namespace emulator {
/*
* Replace a @substring in a given @line with @target
*/
inline std::string replace(
std::string line,
const std::string& substring,
const std::string& target) {
size_t index = 0;
while (true) {
index = line.find(substring, index);
if (index == std::string::npos) {
break;
}
line.replace(index, substring.length(), target);
index += substring.length();
}
return line;
}
/*
* Split given @str into a vector of strings delimited by @delim
*/
inline std::vector<std::string> split(const string& str, const string& delim) {
std::vector<std::string> tokens;
size_t prev = 0, pos = 0;
do {
pos = str.find(delim, prev);
if (pos == std::string::npos) {
pos = str.length();
}
std::string token = str.substr(prev, pos - prev);
if (!token.empty()) {
tokens.push_back(token);
}
prev = pos + delim.length();
} while (pos < str.length() && prev < str.length());
return tokens;
}
/*
* Check if the given @path is valid.
* Remove the file/folder if @remove is specified
*/
inline bool check_path_valid(std::string path, bool remove = true) {
CAFFE_ENFORCE(!path.empty());
std::ifstream file(path.c_str());
// The file should exist or the path is valid
if (!file.good() && !static_cast<bool>(std::ofstream(path).put('t'))) {
return false;
}
file.close();
if (remove) {
std::remove(path.c_str());
}
return true;
}
} // namespace emulator
} // namespace caffe2