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
|