Daniele Bartolini 10 سال پیش
والد
کامیت
782d9782d9
4فایلهای تغییر یافته به همراه24 افزوده شده و 222 حذف شده
  1. 5 3
      src/compilers/bundle_compiler.cpp
  2. 7 186
      src/core/strings/path.cpp
  3. 12 11
      src/core/strings/path.h
  4. 0 22
      src/core/strings/string_utils.h

+ 5 - 3
src/compilers/bundle_compiler.cpp

@@ -91,10 +91,12 @@ bool BundleCompiler::compile_all(const char* platform)
 		continue;
 
 		const char* filename = files[i].c_str();
-		char type[256];
+		const char* type = path::extension(filename);
+
 		char name[256];
-		path::extension(filename, type, 256);
-		path::filename_without_extension(filename, name, 256);
+		const uint32_t size = type - filename - 1;
+		strncpy(name, filename, size);
+		name[size] = '\0';
 
 		compile(type, name, platform);
 	}

+ 7 - 186
src/core/strings/path.cpp

@@ -5,8 +5,8 @@
 
 #include "path.h"
 #include "platform.h"
-#include "string_utils.h"
 #include <ctype.h> // isalpha
+#include <string.h> // strlen, strrchr
 
 namespace crown
 {
@@ -39,195 +39,16 @@ namespace path
 		path += p2;
 	}
 
-	const char* normalize_path(const char* path)
+	const char* basename(const char* path)
 	{
-#if CROWN_PLATFORM_POSIX
-		static char norm[1024];
-		char* cur = norm;
-
-		while ((*path) != '\0')
-		{
-			if ((*path) == '\\')
-			{
-				(*cur) = SEPARATOR;
-			}
-			else
-			{
-				(*cur) = (*path);
-			}
-
-			path++;
-			cur++;
-		}
-
-		return norm;
-#elif CROWN_PLATFORM_WINDOWS
-		static char norm[1024];
-
-		for (uint32_t i = 0; i < strlen(path)+1; i++)
-		{
-			if (path[i] == '/')
-			{
-				norm[i] = SEPARATOR;
-			}
-			else
-			{
-				norm[i] = path[i];
-			}
-		}
-
-		return norm;
-#endif
+		const char* ls = strrchr(path, '/');
+		return ls == NULL ? path : ls + 1;
 	}
 
-	/// Returns the pathname of the path.
-	/// @note
-	/// e.g. "/home/project/texture.tga" -> "/home/project"
-	/// e.g. "/home/project" -> "/home"
-	/// e.g. "/home" -> "/"
-	/// e.g. "home" -> ""
-	///
-	/// The @a path must be valid.
-	void pathname(const char* path, char* str, uint32_t len)
+	const char* extension(const char* path)
 	{
-		CE_ASSERT(path != NULL, "Path must be != NULL");
-		CE_ASSERT(str != NULL, "Str must be != NULL");
-
-		const char* last_separator = strrchr(path, '/');
-		const char* end = path + strlen(path) + 1;
-
-		if (last_separator == end)
-		{
-			strncpy(str, "", len);
-		}
-		else
-		{
-			substring(path, last_separator, str, len);
-		}
-	}
-
-	/// Returns the filename of the path.
-	/// @note
-	/// e.g. "/home/project/texture.tga" -> "texture.tga"
-	/// e.g. "/home/project/texture" -> "texture"
-	/// e.g. "/home -> "home"
-	/// e.g. "/" -> ""
-	///
-	/// The @a path must be valid.
-	void filename(const char* path, char* str, uint32_t len)
-	{
-		CE_ASSERT(path != NULL, "Path must be != NULL");
-		CE_ASSERT(str != NULL, "Str must be != NULL");
-
-		const char* last_separator = strrchr(path, '/');
-		const char* end = str + strlen(path) + 1;
-
-		if (last_separator == end)
-		{
-			strncpy(str, "", len);
-		}
-		else
-		{
-			substring(last_separator + 1, end, str, len);
-		}
-	}
-
-	/// Returns the basename of the path.
-	/// @note
-	/// e.g. "/home/project/texture.tga" -> "texture"
-	/// e.g. "/home/project" -> "project"
-	/// e.g. "/" -> ""
-	///
-	/// The @a path must be valid.
-	void basename(const char* path, char* str, uint32_t len)
-	{
-		CE_ASSERT(path != NULL, "Path must be != NULL");
-		CE_ASSERT(str != NULL, "Str must be != NULL");
-
-		const char* last_separator = strrchr(path, '/');
-		const char* last_dot = strrchr(path, '.');
-		const char* end = path + strlen(path) + 1;
-
-		if (last_separator == end && last_dot != end)
-		{
-			substring(path, last_dot, str, len);
-		}
-		else if (last_separator != end && last_dot == end)
-		{
-			substring(last_separator + 1, end, str, len);
-		}
-		else if (last_separator == end && last_dot == end)
-		{
-			strncpy(str, path, len);
-		}
-		else
-		{
-			substring(last_separator + 1, last_dot, str, len);
-		}
-	}
-
-	/// Returns the extension of the path.
-	/// @note
-	/// e.g. "/home/project/texture.tga" -> "tga"
-	/// e.g. "/home/project.x/texture" -> ""
-	///
-	/// The @a path must be valid.
-	void extension(const char* path, char* str, uint32_t len)
-	{
-		CE_ASSERT(path != NULL, "Path must be != NULL");
-		CE_ASSERT(str != NULL, "Str must be != NULL");
-
-		const char* last_dot = strrchr(path, '.');
-		const char* end = path + strlen(path) + 1;
-
-		if (last_dot == end)
-		{
-			strncpy(str, "", len);
-		}
-		else
-		{
-			substring(last_dot + 1, end, str, len);
-		}
-	}
-
-	/// Returns the filename without the extension.
-	/// @note
-	/// e.g. "/home/project/texture.tga" -> "/home/project/texture"
-	/// e.g. "/home/project/texture" -> "/home/project/texture"
-	///
-	/// The @a path must be valid.
-	void filename_without_extension(const char* path, char* str, uint32_t len)
-	{
-		CE_ASSERT(path != NULL, "Path must be != NULL");
-		CE_ASSERT(str != NULL, "Str must be != NULL");
-
-		const char* last_dot = strrchr(path, '.');
-
-		substring(path, last_dot, str, len);
-	}
-
-	/// Fills 'ret' with the same path but without the trailing directory separator.
-	/// @note
-	/// e.g. "/home/project/texture.tga/" -> "/home/project/texture.tga"
-	/// e.g. "/home/project/texture.tga" -> "/home/project/texture.tga"
-	///
-	/// The @a path must be valid.
-	void strip_trailing_separator(const char* path, char* str, uint32_t len)
-	{
-		CE_ASSERT(path != NULL, "Path must be != NULL");
-		CE_ASSERT(str != NULL, "Str must be != NULL");
-
-		size_t path_len = strlen(path);
-		const char* end = path + strlen(path) + 1;
-
-		if (path[path_len - 1] == '/')
-		{
-			substring(path, end - 2, str, len);
-		}
-		else
-		{
-			substring(path, end, str, len);
-		}
+		const char* ld = strrchr(path, '.');
+		return ld == NULL ? NULL : ld + 1;
 	}
 } // namespace path
 } // namespace crown

+ 12 - 11
src/core/strings/path.h

@@ -32,16 +32,17 @@ namespace path
 	/// Appends path @a p2 to @a p1 and fills @a path with the result.
 	void join(const char* p1, const char* p2, DynamicString& path);
 
-	/// Returns os-dependent path from os-indipendent @a path
-	const char* normalize(const char* path);
-
-	void pathname(const char* path, char* str, uint32_t len);
-	void filename(const char* path, char* str, uint32_t len);
-	void basename(const char* path, char* str, uint32_t len);
-	void extension(const char* path, char* str, uint32_t len);
-	void filename_without_extension(const char* path, char* str, uint32_t len);
-
-	//bool segments(const char* path, Array<Str>& ret);
-	void strip_trailing_separator(const char* path, char* ret, uint32_t len);
+	/// Returns the basename of the @a path.
+	/// @note
+	/// "/home/project/texture.tga" -> "texture.tga"
+	/// "/home/project" -> "project"
+	/// "/" -> ""
+	const char* basename(const char* path);
+
+	/// Returns the extension of the @a path or NULL.
+	/// @note
+	/// "/home/texture.tga" -> "tga"
+	/// "/home/texture" -> NULL
+	const char* extension(const char* path);
 } // namespace path
 } // namespace crown

+ 0 - 22
src/core/strings/string_utils.h

@@ -61,28 +61,6 @@ inline const char* skip_block(const char* str, char a, char b)
 	return NULL;
 }
 
-inline void substring(const char* begin, const char* end, char* out, size_t len)
-{
-	CE_ASSERT(begin != NULL, "Begin must be != NULL");
-	CE_ASSERT(end != NULL, "End must be != NULL");
-	CE_ASSERT(out != NULL, "Out must be != NULL");
-
-	size_t i = 0;
-
-	char* out_iterator = out;
-
-	while (begin != end && i < len)
-	{
-		(*out_iterator) = (*begin);
-
-		begin++;
-		out_iterator++;
-		i++;
-	}
-
-	out[i] = '\0';
-}
-
 inline int32_t parse_int(const char* str)
 {
 	int val;