From 643ff2b38a1825ce7ea356aea4a8a0013a4caf79 Mon Sep 17 00:00:00 2001 From: Trass3r Date: Fri, 29 Oct 2010 10:41:46 +0000 Subject: [PATCH] + Vector swizzling (thx Simen Kjaeraas) - alloc.d * small fix in KeyCode enum git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1586 4e206d99-4929-0410-ac5d-dfc041789085 --- DSFML/import/dsfml/system/alloc.d | 84 ----------------------------- DSFML/import/dsfml/system/vector.d | 30 +++++++++++ DSFML/import/dsfml/window/context.d | 1 - DSFML/import/dsfml/window/event.d | 2 +- 4 files changed, 31 insertions(+), 86 deletions(-) delete mode 100644 DSFML/import/dsfml/system/alloc.d diff --git a/DSFML/import/dsfml/system/alloc.d b/DSFML/import/dsfml/system/alloc.d deleted file mode 100644 index b852ad312..000000000 --- a/DSFML/import/dsfml/system/alloc.d +++ /dev/null @@ -1,84 +0,0 @@ -/* -* DSFML - SFML Library wrapper for the D programming language. -* Copyright (C) 2008 Julien Dagorn (sirjulio13@gmail.com) -* Copyright (C) 2010 Andreas Hollandt -* -* This software is provided 'as-is', without any express or -* implied warranty. In no event will the authors be held -* liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute -* it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; -* you must not claim that you wrote the original software. -* If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but -* is not required. -* -* 2. Altered source versions must be plainly marked as such, -* and must not be misrepresented as being the original software. -* -* 3. This notice may not be removed or altered from any -* source distribution. -*/ - -module dsfml.system.alloc; - -version (Tango) -{ - public import tango.core.Memory; -} -else -{ - public import core.memory; -} - -/* - struct GC - { - static void* malloc(uint size) - { - return std.c.stdlib.malloc(size); - } - - static void free(void* ptr) - { - std.c.stdlib.free(ptr); - } - - static void addRange(void* ptr, uint size) - { - std.gc.addRange(ptr, ptr + size); - } - - static void removeRange(void* ptr) - { - std.gc.removeRange(ptr); - } - } - -*/ - -/* -* Template for native non-GCed allocation for interaction between C and D threads. -*/ -template Alloc() -{ - new (uint size) - { - void* p = GC.malloc(size); - if (!p) - assert(0, "Memory allocation failed"); - - GC.addRange(p, size); - return p; - } - - delete(void* p) - { - GC.removeRange(p); - GC.free(p); - } -} diff --git a/DSFML/import/dsfml/system/vector.d b/DSFML/import/dsfml/system/vector.d index c74675197..5f906b2e8 100644 --- a/DSFML/import/dsfml/system/vector.d +++ b/DSFML/import/dsfml/system/vector.d @@ -145,6 +145,7 @@ struct Vector(T, int dim) } /// operations with a scalar + // TODO: make this usable with arbitrary scalars (not only Vector element type T), including necessary checks etc. typeof(this) opBinary(string op)(T s) { Vector res = void; @@ -325,7 +326,33 @@ struct Vector(T, int dim) static if (dim >= 4) if (w != v.w) return false; return true; } + + /// swizzling + @property Vector!(T,n.length) opDispatch(string n)() const + if (allCharsValid(n,"xyzw"[0..dim])) + { + static if (n.length == 2) return + Vector!(T,n.length)(cell[n[0]-'x'], cell[n[1]-'x']); + static if (n.length == 3) return + Vector!(T,n.length)(cell[n[0]-'x'], cell[n[1]-'x'], cell[n[2]-'x']); + static if (n.length == 4) return + Vector!(T,n.length)(cell[n[0]-'x'], cell[n[1]-'x'], cell[n[2]-'x'], cell[n[3]-'x']); + } + // helper function + static private bool allCharsValid( string s, string valid ) + { + foreach ( e1; s ) + { + bool b = false; + foreach (e2; valid) + b |= e1 == e2; + if (!b) + return false; + } + return true; + } + /// bool isUnit() { @@ -373,6 +400,9 @@ unittest assert(v+w == Vector3f(0.5f, 3.f, 0.f)); assert(v-w == Vector3f(2.5f, -1.f, 1.f)); + + auto r = v.xy; + writeln(r); } /** diff --git a/DSFML/import/dsfml/window/context.d b/DSFML/import/dsfml/window/context.d index 07fa88db2..8d36dd38f 100644 --- a/DSFML/import/dsfml/window/context.d +++ b/DSFML/import/dsfml/window/context.d @@ -26,7 +26,6 @@ module dsfml.window.context; import dsfml.system.common; -import dsfml.window.common; /** * diff --git a/DSFML/import/dsfml/window/event.d b/DSFML/import/dsfml/window/event.d index 6e9a49eeb..e878ecf04 100644 --- a/DSFML/import/dsfml/window/event.d +++ b/DSFML/import/dsfml/window/event.d @@ -108,7 +108,7 @@ enum KeyCode Insert, Delete, Add, - Substract, + Subtract, Multiply, Divide, Left,