Daniele Bartolini 9 ani în urmă
părinte
comite
99e6c5f8f1

+ 8 - 5
src/core/os.cpp

@@ -35,7 +35,8 @@ namespace os
 				continue;
 
 			TempAllocator512 ta;
-			DynamicString fname(dname, ta);
+			DynamicString fname(ta);
+			fname.set(dname, strlen32(dname));
 			vector::push_back(files, fname);
 		}
 
@@ -52,14 +53,15 @@ namespace os
 
 		do
 		{
-			const char* fname = ffd.cFileName;
+			const char* filename = ffd.cFileName;
 
 			if (!strcmp(fname, ".") || !strcmp(fname, ".."))
 				continue;
 
 			TempAllocator512 ta;
-			DynamicString filename(fname, ta);
-			vector::push_back(files, filename);
+			DynamicString fname(ta);
+			fname.set(filename, strlen32(filename));
+			vector::push_back(files, fname);
 		}
 		while (FindNextFile(file, &ffd) != 0);
 
@@ -71,7 +73,8 @@ namespace os
 	{
 #if CROWN_PLATFORM_POSIX
 		TempAllocator512 ta;
-		DynamicString cmd(path, ta);
+		DynamicString cmd(ta);
+		cmd += path;
 		cmd += " 2>&1 ";
 		cmd += args;
 		FILE* file = popen(cmd.c_str(), "r");

+ 0 - 8
src/core/strings/dynamic_string.h

@@ -25,7 +25,6 @@ struct DynamicString
 	Array<char> _data;
 
 	DynamicString(Allocator& a);
-	DynamicString(const char* str, Allocator& a = default_allocator());
 
 	DynamicString& operator=(const DynamicString& ds);
 	DynamicString& operator=(const char* str);
@@ -71,13 +70,6 @@ inline DynamicString::DynamicString(Allocator& a)
 {
 }
 
-inline DynamicString::DynamicString(const char* str, Allocator& a)
-	: _data(a)
-{
-	CE_ASSERT_NOT_NULL(str);
-	array::push(_data, str, strlen32(str));
-}
-
 inline void DynamicString::set(const char* str, u32 len)
 {
 	array::resize(_data, len);

+ 10 - 5
src/core/unit_tests.cpp

@@ -888,31 +888,36 @@ static void test_dynamic_string()
 	}
 	{
 		TempAllocator1024 ta;
-		DynamicString str("Test ", ta);
+		DynamicString str(ta);
+		str += "Test ";
 		str += "string.";
 		ENSURE(strcmp(str.c_str(), "Test string.") == 0);
 	}
 	{
 		TempAllocator1024 ta;
-		DynamicString str("   \tSushi\t   ", ta);
+		DynamicString str(ta);
+		str.set("   \tSushi\t   ", 15);
 		str.ltrim();
 		ENSURE(strcmp(str.c_str(), "Sushi\t   ") == 0);
 	}
 	{
 		TempAllocator1024 ta;
-		DynamicString str("   \tSushi\t   ", ta);
+		DynamicString str(ta);
+		str.set("   \tSushi\t   ", 15);
 		str.rtrim();
 		ENSURE(strcmp(str.c_str(), "   \tSushi") == 0);
 	}
 	{
 		TempAllocator1024 ta;
-		DynamicString str("   \tSushi\t   ", ta);
+		DynamicString str(ta);
+		str.set("   \tSushi\t   ", 15);
 		str.trim();
 		ENSURE(strcmp(str.c_str(), "Sushi") == 0);
 	}
 	{
 		TempAllocator1024 ta;
-		DynamicString str("Hello everyone!", ta);
+		DynamicString str(ta);
+		str.set("Hello everyone!", 15);
 		ENSURE(str.has_prefix("Hello"));
 		ENSURE(!str.has_prefix("hello"));
 		ENSURE(str.has_suffix("one!"));

+ 40 - 13
src/resource/bundle_compiler.cpp

@@ -65,19 +65,46 @@ void BundleCompiler::scan(const char* source_dir)
 	_source_fs.set_prefix(source_dir);
 
 	TempAllocator512 ta;
-	vector::push_back(_globs, DynamicString("*.tmp", ta));
-	vector::push_back(_globs, DynamicString("*.wav", ta));
-	vector::push_back(_globs, DynamicString("*.ogg", ta));
-	vector::push_back(_globs, DynamicString("*.png", ta));
-	vector::push_back(_globs, DynamicString("*.tga", ta));
-	vector::push_back(_globs, DynamicString("*.dds", ta));
-	vector::push_back(_globs, DynamicString("*.ktx", ta));
-	vector::push_back(_globs, DynamicString("*.pvr", ta));
-	vector::push_back(_globs, DynamicString("*.swn", ta)); // VIM swap file.
-	vector::push_back(_globs, DynamicString("*.swo", ta)); // VIM swap file.
-	vector::push_back(_globs, DynamicString("*.swp", ta)); // VIM swap file.
-	vector::push_back(_globs, DynamicString("*~", ta));
-	vector::push_back(_globs, DynamicString(".*", ta));
+	DynamicString ext_tmp(ta);
+	DynamicString ext_wav(ta);
+	DynamicString ext_ogg(ta);
+	DynamicString ext_png(ta);
+	DynamicString ext_tga(ta);
+	DynamicString ext_dds(ta);
+	DynamicString ext_ktx(ta);
+	DynamicString ext_pvr(ta);
+	DynamicString ext_swn(ta); // VIM swap file.
+	DynamicString ext_swo(ta); // VIM swap file.
+	DynamicString ext_swp(ta); // VIM swap file.
+	DynamicString ext_bak(ta);
+	DynamicString ext_all(ta);
+	ext_tmp.set("*.tmp", 5);
+	ext_wav.set("*.wav", 5);
+	ext_ogg.set("*.ogg", 5);
+	ext_png.set("*.png", 5);
+	ext_tga.set("*.tga", 5);
+	ext_dds.set("*.dds", 5);
+	ext_ktx.set("*.ktx", 5);
+	ext_pvr.set("*.pvr", 5);
+	ext_swn.set("*.swn", 5);
+	ext_swo.set("*.swo", 5);
+	ext_swp.set("*.swp", 5);
+	ext_bak.set("*~", 2);
+	ext_all.set(".*", 2);
+
+	vector::push_back(_globs, ext_tmp);
+	vector::push_back(_globs, ext_wav);
+	vector::push_back(_globs, ext_ogg);
+	vector::push_back(_globs, ext_png);
+	vector::push_back(_globs, ext_tga);
+	vector::push_back(_globs, ext_dds);
+	vector::push_back(_globs, ext_ktx);
+	vector::push_back(_globs, ext_pvr);
+	vector::push_back(_globs, ext_swn);
+	vector::push_back(_globs, ext_swo);
+	vector::push_back(_globs, ext_swp);
+	vector::push_back(_globs, ext_bak);
+	vector::push_back(_globs, ext_all);
 
 	if (_source_fs.exists(CROWN_BUNDLEIGNORE))
 	{

+ 4 - 2
src/resource/compile_options.h

@@ -70,7 +70,8 @@ public:
 	bool resource_exists(const char* type, const char* name)
 	{
 		TempAllocator1024 ta;
-		DynamicString path(name, ta);
+		DynamicString path(ta);
+		path += name;
 		path += ".";
 		path += type;
 		return file_exists(path.c_str());
@@ -165,7 +166,8 @@ public:
 	void add_dependency(const char* path)
 	{
 		TempAllocator256 ta;
-		DynamicString dep(path, ta);
+		DynamicString dep(ta);
+		dep += path;
 		vector::push_back(_dependencies, dep);
 	}
 };

+ 19 - 12
src/resource/shader_resource.cpp

@@ -1077,11 +1077,12 @@ namespace shader_resource
 			for (u32 i = 0; i < vector::size(_static_compile); ++i)
 			{
 				const StaticCompile& sc              = _static_compile[i];
-				const char* shader                   = sc._shader.c_str();
+				const DynamicString& shader          = sc._shader;
 				const Vector<DynamicString>& defines = sc._defines;
 
 				TempAllocator1024 ta;
-				DynamicString str(shader, ta);
+				DynamicString str(ta);
+				str = shader;
 				for (u32 i = 0; i < vector::size(defines); ++i)
 				{
 					str += "+";
@@ -1094,32 +1095,35 @@ namespace shader_resource
 					, "Unknown shader: '%s'"
 					, shader
 					);
-				const ShaderPermutation& sp = _shaders[shader];
-				const char* bgfx_shader     = sp._bgfx_shader.c_str();
-				const char* render_state    = sp._render_state.c_str();
+				const ShaderPermutation& sp       = _shaders[shader];
+				const DynamicString& bgfx_shader  = sp._bgfx_shader;
+				const DynamicString& render_state = sp._render_state;
 
 				RESOURCE_COMPILER_ASSERT(map::has(_bgfx_shaders, sp._bgfx_shader)
 					, _opts
 					, "Unknown bgfx shader: '%s'"
-					, bgfx_shader
+					, bgfx_shader.c_str()
 					);
 				RESOURCE_COMPILER_ASSERT(map::has(_render_states, sp._render_state)
 					, _opts
 					, "Unknown render state: '%s'"
-					, render_state
+					, render_state.c_str()
 					);
 
 				const RenderState& rs = _render_states[render_state];
 
 				_opts.write(shader_name._id);  // Shader name
 				_opts.write(rs.encode());      // Render state
-				compile(bgfx_shader, defines); // Shader code
+				compile(bgfx_shader.c_str(), defines); // Shader code
 			}
 		}
 
 		void compile_sampler_states(const char* bgfx_shader)
 		{
-			const BgfxShader& shader = _bgfx_shaders[bgfx_shader];
+			TempAllocator512 ta;
+			DynamicString key(ta);
+			key = bgfx_shader;
+			const BgfxShader& shader = _bgfx_shaders[key];
 
 			_opts.write(map::size(shader._samplers));
 
@@ -1129,7 +1133,7 @@ namespace shader_resource
 			{
 				const DynamicString& name = begin->pair.first;
 				const DynamicString& sampler_state = begin->pair.second;
-				const SamplerState& ss = _sampler_states[sampler_state.c_str()];
+				const SamplerState& ss = _sampler_states[sampler_state];
 
 				_opts.write(name.to_string_id());
 				_opts.write(ss.encode());
@@ -1138,12 +1142,15 @@ namespace shader_resource
 
 		void compile(const char* bgfx_shader, const Vector<DynamicString>& defines)
 		{
-			const BgfxShader& shader = _bgfx_shaders[bgfx_shader];
+			TempAllocator512 taa;
+			DynamicString key(taa);
+			key = bgfx_shader;
+			const BgfxShader& shader = _bgfx_shaders[key];
 
 			DynamicString included_code(default_allocator());
 			if (!(shader._includes == ""))
 			{
-				const BgfxShader& included = _bgfx_shaders[shader._includes.c_str()];
+				const BgfxShader& included = _bgfx_shaders[shader._includes];
 				included_code = included._code;
 			}