#ifndef NALL_FILENAME_HPP
#define NALL_FILENAME_HPP

namespace nall {

// "foo/bar.c" -> "foo/"
// "foo/" -> "foo/"
// "bar.c" -> "./"
inline string dir(char const *name) {
  string result = name;
  for(signed i = strlen(result); i >= 0; i--) {
    if(result[i] == '/' || result[i] == '\\') {
      result[i + 1] = 0;
      break;
    }
    if(i == 0) result = "./";
  }
  return result;
}

// "foo/bar.c" -> "bar.c"
inline string notdir(char const *name) {
  for(signed i = strlen(name); i >= 0; i--) {
    if(name[i] == '/' || name[i] == '\\') {
      name += i + 1;
      break;
    }
  }
  string result = name;
  return result;
}

// "foo/bar.c" -> "foo/bar"
inline string basename(char const *name) {
  string result = name;
  for(signed i = strlen(result); i >= 0; i--) {
    if(result[i] == '/' || result[i] == '\\') {
      //file has no extension
      break;
    }
    if(result[i] == '.') {
      result[i] = 0;
      break;
    }
  }
  return result;
}

// "foo/bar.c" -> "c"
inline string extension(char const *name) {
  for(signed i = strlen(name); i >= 0; i--) {
    if(name[i] == '.') {
      name += i + 1;
      break;
    }
  }
  string result = name;
  return result;
}

}

#endif
