ubyte[] -> immutable(ubyte)[]

Andrej Mitrovic test at test.test
Thu Sep 9 19:40:21 PDT 2010


 I'm trying to use algorithm.copy, but I get back nothing in the copy buffer. How do I to copy an array of ubyte's?

iimport std.algorithm,
       std.concurrency,
       std.stdio;

void main()
{
    enum bufferSize = 4;
    auto tid = spawn(&fileWriter);
    
    // Read loop
    foreach (ubyte[] buffer; stdin.byChunk(bufferSize))
    {
        immutable(ubyte)[] copy_buffer;
        copy(buffer, copy_buffer);
        
        writeln(copy_buffer);  // writes nothing

        send(tid, copy_buffer);
    }
}

void fileWriter()
{
    while (true)
    {
        auto buffer = receiveOnly!(immutable(ubyte)[])();
        // writeln(buffer);
    }
}

Andrej Mitrovic Wrote:

> This is from TDPL page 407:
> 
> import std.algorithm,
>        std.concurrency,
>        std.stdio;
> 
> void main()
> {
>     enum bufferSize = 1024 * 100;
>     auto tid = spawn(&fileWriter);
>     
>     // Read loop
>     foreach (immutable(ubyte)[] buffer; stdin.byChunk(bufferSize))
>     {
>         send(tid, buffer);
>     }
> }
> 
> void fileWriter()
> {
>     // write loop
>     while (true)
>     {
>         auto buffer = receiveOnly!(immutable(ubyte)[])();
>         tgt.write(buffer);
>     }
> }
> 
> Error:
> C:\DMD\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(1943):
> Error: cannot implicitly convert expression (buffer) of type ubyte[] 
> to immutable(ubyte)[]
> 
> Yet interestingly I can't use type inference:
> 
>     foreach (buffer; stdin.byChunk(bufferSize))
>     {
>         send(tid, buffer);
>     }
> 
> Error: stdin_stdout_copy.d(11): Error: cannot infer type for buffer
> 
> But in the original code I get back a mutable ubyte[] which I can't implicitly convert to immutable (I'd need a copy first). There's no .dup or .idup property for stdin.byChunk. So what am I supossed to do here?
> 
> 



More information about the Digitalmars-d-learn mailing list