Пример #1
0
String StringUtil::Translate(CStrRef input, CStrRef from, CStrRef to) {
  if (input.empty()) return input;

  int len = input.size();
  String retstr(len, ReserveString);
  char *ret = retstr.mutableSlice().ptr;
  memcpy(ret, input.data(), len);
  auto trlen = std::min(from.size(), to.size());
  string_translate(ret, len, from.data(), to.data(), trlen);
  return retstr.setSize(len);
}
Пример #2
0
String StringUtil::Translate(const String& input, const String& from,
                             const String& to) {
  if (input.empty()) return input;

  int len = input.size();
  String retstr(len, ReserveString);
  char *ret = retstr.bufferSlice().ptr;
  memcpy(ret, input.data(), len);
  auto trlen = std::min(from.size(), to.size());
  string_translate(ret, len, from.data(), to.data(), trlen);
  return retstr.setSize(len);
}
Пример #3
0
String StringUtil::Translate(CStrRef input, CStrRef from, CStrRef to) {
  if (input.empty()) return input;

  int len = input.size();
  char *ret = (char *)malloc(len + 1);
  memcpy(ret, input, len);
  ret[len] = '\0';
  int fromSize = from.size();
  int toSize = to.size();
  int trlen = (fromSize < toSize) ? fromSize : toSize;
  string_translate(ret, len, from, to, trlen);
  return String(ret, len, AttachString);
}
Пример #4
0
String StringUtil::Translate(CStrRef input, CStrRef from, CStrRef to) {
  if (input.empty()) return input;

  if (from.empty()) {
    throw InvalidArgumentException("from", "(empty)");
  }
  if (from.size() != to.size()) {
    throw InvalidArgumentException("from and to", "(different sizes)");
  }

  int len = input.size();
  char *ret = (char *)malloc(len + 1);
  memcpy(ret, input, len);
  ret[len] = '\0';

  string_translate(ret, len, from, to, from.size());
  return String(ret, len, AttachString);
}