xref: /aosp_15_r20/external/pytorch/caffe2/utils/string_utils.h (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1 #pragma once
2 
3 #include <algorithm>
4 #include <memory>
5 #include <string>
6 #include <vector>
7 
8 #include <c10/macros/Export.h>
9 
10 namespace caffe2 {
11 
12 TORCH_API std::vector<std::string>
13 split(char separator, const std::string& string, bool ignore_empty = false);
14 
15 TORCH_API std::string trim(const std::string& str);
16 
17 TORCH_API size_t editDistance(
18     const std::string& s1,
19     const std::string& s2,
20     size_t max_distance = 0);
21 
StartsWith(const std::string & str,const std::string & prefix)22 TORCH_API inline bool StartsWith(
23     const std::string& str,
24     const std::string& prefix) {
25   return str.length() >= prefix.length() &&
26       std::mismatch(prefix.begin(), prefix.end(), str.begin()).first ==
27       prefix.end();
28 }
29 
EndsWith(const std::string & full,const std::string & ending)30 TORCH_API inline bool EndsWith(
31     const std::string& full,
32     const std::string& ending) {
33   if (full.length() >= ending.length()) {
34     return (
35         0 ==
36         full.compare(full.length() - ending.length(), ending.length(), ending));
37   } else {
38     return false;
39   }
40 }
41 
42 TORCH_API int32_t editDistanceHelper(
43     const char* s1,
44     size_t s1_len,
45     const char* s2,
46     size_t s2_len,
47     std::vector<size_t>& current,
48     std::vector<size_t>& previous,
49     std::vector<size_t>& previous1,
50     size_t max_distance);
51 } // namespace caffe2
52