2 memory-stream.cc -- implement Memory_out_stream
4 source file of the GNU LilyPond music typesetter
6 (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
14 #include "memory-stream.hh"
16 const int Memory_out_stream::block_size_ = 1024;
19 Memory_out_stream::functions_ = {
20 Memory_out_stream::reader,
21 Memory_out_stream::writer,
22 Memory_out_stream::seeker,
23 Memory_out_stream::cleaner
27 Memory_out_stream::cleaner (void *cookie)
29 Memory_out_stream *stream = (Memory_out_stream*) cookie;
35 Memory_out_stream::Memory_out_stream ()
40 file_ = fopencookie ((void*) this, "w", functions_);
43 Memory_out_stream::~Memory_out_stream()
52 Memory_out_stream::get_file () const
58 Memory_out_stream::get_length () const
64 Memory_out_stream::get_string () const
71 Memory_out_stream::writer (void *cookie,
75 Memory_out_stream * stream = (Memory_out_stream*) cookie;
77 ssize_t newsize = stream->size_ + size;
80 while (newsize > stream->buffer_blocks_ * block_size_)
82 stream->buffer_blocks_ *= 2;
83 stream->buffer_blocks_ += 1;
88 stream->buffer_ = (char*) realloc (stream->buffer_, stream->buffer_blocks_ * block_size_);
90 memcpy (stream->buffer_ + stream->size_, buffer, size);
91 stream->size_ = newsize;
98 Memory_out_stream::reader (void *cookie,
111 Memory_out_stream::seeker (void*, off64_t *, int whence)