codegen_utils.cc 856 Bytes
Newer Older
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
/*!
 * \file target/codegen_utils.cc
 * \brief Shared utility functions for code generation
 */

#include "codegen_utils.h"

namespace tvm {
namespace codegen {

bool CheckOutermostParenthesesMatch(const std::string &s) {
  if (!s.empty() && s.front() == '(' && s.back() == ')') {
    size_t len = s.size();
    int n_unmatched = 0;
    for (size_t i = 0; i < len; ++i) {
      if (s[i] == '(') {
        n_unmatched++;
      } else if (s[i] == ')') {
        n_unmatched--;
      }
      if (n_unmatched < 0) {
        return false;
      }
      if (n_unmatched == 0) {
        return i == len - 1;
      }
    }
  }
  return false;
}

std::string RemoveOutermostParentheses(const std::string &s) {
  if (CheckOutermostParenthesesMatch(s)) {
    return s.substr(1, s.size() - 2);
  } else {
    return s;
  }
}

} // namespace codegen
} // namespace tvm