diff orange/serialization/archives/Archive.d @ 20:9a575087b961

Added support for slices. Strings and arrays are now treated as references.
author Jacob Carlborg <doob@me.com>
date Mon, 04 Oct 2010 18:27:21 +0200
parents 3d42ea434d46
children 55f0a9d5df8d
line wrap: on
line diff
--- a/orange/serialization/archives/Archive.d	Thu Aug 12 23:24:51 2010 +0200
+++ b/orange/serialization/archives/Archive.d	Mon Oct 04 18:27:21 2010 +0200
@@ -17,6 +17,21 @@
 
 import orange.serialization.archives.ArchiveException;
 
+struct Slice
+{
+	size_t length;
+	void* ptr;
+	
+	static Slice opCall (T) (T[] value)
+	{
+		Slice slice;
+		slice.length = value.length;
+		slice.ptr = value.ptr;
+		
+		return slice;
+	}
+}
+
 interface IArchive
 {
 	void beginArchiving ();
@@ -53,5 +68,13 @@
 		
 		catch (ConversionException e)
 			throw new ArchiveException(e);
-	}	
+	}
+	
+	protected bool isSliceOf (T, U = T) (T[] a, U[] b)
+	{
+		void* aPtr = a.ptr;
+		void* bPtr = b.ptr;
+		
+		return aPtr >= bPtr && aPtr + a.length * T.sizeof <= bPtr + b.length * U.sizeof;
+	}
 }
\ No newline at end of file