Mercurial > projects > orange
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