#ifdef NALL_STRING_INTERNAL_HPP

namespace nall {

char* strlower(char* str) {
  if(!str) return nullptr;
  int i = 0;
  while(str[i]) {
    str[i] = chrlower(str[i]);
    i++;
  }
  return str;
}

char* strupper(char* str) {
  if(!str) return nullptr;
  int i = 0;
  while(str[i]) {
    str[i] = chrupper(str[i]);
    i++;
  }
  return str;
}

char* qstrlower(char* s) {
  if(!s) return nullptr;
  bool quoted = false;
  while(*s) {
    if(*s == '\"' || *s == '\'') quoted ^= 1;
    if(quoted == false && *s >= 'A' && *s <= 'Z') *s += 0x20;
    s++;
  }
  return s;
}

char* qstrupper(char* s) {
  if(!s) return nullptr;
  bool quoted = false;
  while(*s) {
    if(*s == '\"' || *s == '\'') quoted ^= 1;
    if(quoted == false && *s >= 'a' && *s <= 'z') *s -= 0x20;
    s++;
  }
  return s;
}

char* strtr(char* dest, const char* before, const char* after) {
  if(!dest || !before || !after) return dest;
  int sl = strlen(dest), bsl = strlen(before), asl = strlen(after);

  if(bsl != asl || bsl == 0) return dest;  //patterns must be the same length for 1:1 replace
  for(unsigned i = 0; i < sl; i++) {
    for(unsigned l = 0; l < bsl; l++) {
      if(dest[i] == before[l]) {
        dest[i] = after[l];
        break;
      }
    }
  }

  return dest;
}

}

#endif
