ubyte[] -> immutable(ubyte)[]

vino via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue May 3 08:31:45 PDT 2016


On Friday, 10 September 2010 at 15:15:38 UTC, Andrej Mitrovic 
wrote:
> Yeah, one would think the destination is on the left (just like 
> the standard C way of doing it), but it's not. I checked it in 
> the docs and the source. And idup works, thanks.
>
> Kagamin Wrote:
>
>> Andrej Mitrovic Wrote:
>> 
>> >     foreach (ubyte[] buffer; stdin.byChunk(bufferSize))
>> >     {
>> >         immutable(ubyte)[] copy_buffer;
>> >         copy(buffer, copy_buffer);
>> > 
>> >         writeln(copy_buffer);  // writes nothing
>> > 
>> >         send(tid, copy_buffer);
>> >     }
>> 
>> Isn't destination the left argument?
>> Why you don't use send(tid, buffer.idup);
>> ?

Hi Andrei/All,

  Request your help, I am trying the program written by you with 
few changes such as the example program read the input from stdin 
and prints the data to stdout, but my program reads the input 
from the file(readfile.txt) and writes the output to another 
file(writefile.txt), and I am getting the below errors while 
compiling

Testing:
Read a file(readfile.txt : Contain 20,000 lines) by chunk into a 
buffer(read buffer)
Pass the buffered data to an output buffer(write buffer) and then 
write the output buffer to a to another file(writefile.txt).
Error:

[root at localhost DProjects]# dmd readwriteb.d
readwriteb.d(7): Error: cannot implicitly convert expression 
(__aggr2859.front()) of type ubyte[] to immutable(ubyte)[]
readwriteb.d(15): Error: cannot implicitly convert expression 
(receiveOnly()) of type immutable(ubyte)[] to 
std.outbuffer.OutBuffer
[root at localhost DProjects]#

Version: DMD64 D Compiler v2.071.0

Code:

import std.algorithm, std.concurrency, std.stdio, std.outbuffer, 
std.file;

void main() {
    enum bufferSize = 1024 * 100;
    auto file = File("readfile.txt", "r");
    auto tid = spawn(&fileWriter);
    foreach (immutable(ubyte)[] buffer; file.byChunk(bufferSize)) {
       send(tid, buffer);
    }
}

void fileWriter() {
    auto wbuf  = new OutBuffer();
    for (;;) {
       wbuf = receiveOnly!(immutable(ubyte)[])();
       write("writefile.txt", wbuf);
    }
}

After few changes as below I was able to compile, but when i run 
the program there is no data in the writefile.txt

import std.algorithm, std.concurrency, std.stdio, std.file;

void main() {
    enum bufferSize = 1024 * 100;
    auto file = File("readfile.txt", "r");
    auto tid = spawn(&fileWriter);
    foreach (ubyte[] buffer; file.byChunk(bufferSize)) {
       send(tid, buffer.idup);
    }
}

void fileWriter() {
auto file = File("writefile.txt", "w");
for (;;) {
      auto  wbuf = receiveOnly!(ubyte[])();
       file.writeln("writefile.txt", wbuf);
    }
}

From,
Vino.B


More information about the Digitalmars-d-learn mailing list