On Wed, 07 May 2014 19:41:16 +0100, Maxime Chevalier-Boisvert <maximechevali...@gmail.com> wrote:

Unless I'm misunderstanding it should be as simple as:

wchar[100] stackws; // alloca() if you need it to be dynamically sized.

A slice of this static array behaves just like a slice of a dynamic array.

I do need it to be dynamically sized. I also want to avoid copying my string data if possible. Basically, I just want to create a wstring "view" on an existing "raw" buffer that exists in memory somewhere, based on a pointer to this buffer and its length.

import std.stdio;
import core.stdc.stdlib : malloc;
import core.stdc.wchar_ : wcscpy;

wchar[] toWChar(const void *ptr, int len)
{
// Cast pointer to wchar*, create slice (on the heap?) from it (copies no data)
        return (cast(wchar*)ptr)[0..len];
}

void main()
{
        // Pre-existing data
        int len = 12;
        wchar *ptr = cast(wchar*)malloc(len * wchar.sizeof);
        wcscpy(ptr, "Hello World");
        
        // Create slice of data
        wchar[] slice = toWChar(ptr, len);
        writefln("%s", slice);
}

R

--
Using Opera's revolutionary email client: http://www.opera.com/mail/

Reply via email to