Boost logo

Boost :

Subject: Re: [boost] [iostreams] array and gzip_decompressor
From: Nikolay Mladenov (nikolay.mladenov_at_[hidden])
Date: 2010-03-01 16:52:45


On Mon, Mar 1, 2010 at 10:40 AM, Chris Hamilton <chamilton_at_[hidden]> wrote:
> Ahh... my bad for misreading ;)
>
> Rather than patching things this way, you could always use the
> array_source device defined in <boost/iostreams/device/array.hpp>.  A
> very simple wrapper can also be written around a std::vector, or you can
> use the array_source directly on the internal data of the std::vector.
>
> You then use a filtered_source, and push back the gzip_decompressor
> followed by the array_source, like the earlier example in this thread.

That is exactly what is not working. And the patch is to make it work.
I actually found out that there is a ticket for this problem already.

>
> Cheers,
>
> Chris
>
>> Thank you eg, Chris,
>>
>> But I have probably misled you a bit with my post.
>> The gzipped data is actually in memory (inside the storage variable),
>> and I wanted to have a gzip_decompressing stream fromT that.
>>
>> for no I am using this patch
>>
>>
>> Index: detail/adapter/direct_adapter.hpp
>> ===================================================================
>> --- detail/adapter/direct_adapter.hpp   (revision 59992)
>> +++ detail/adapter/direct_adapter.hpp   (working copy)
>> @@ -116,6 +116,7 @@
>>      std::streamsize write(const char_type* s, std::streamsize n);
>>      std::streampos seek( stream_offset, BOOST_IOS::seekdir,
>>                           BOOST_IOS::openmode = BOOST_IOS::in |
>> BOOST_IOS::out );
>> +    bool putback(const char_type c);
>>      void close();
>>      void close(BOOST_IOS::openmode which);
>>  #ifndef BOOST_IOSTREAMS_NO_LOCALE
>> @@ -204,6 +205,18 @@
>>  }
>>
>>  template<typename Direct>
>> +inline bool direct_adapter<Direct>::putback
>> +    (const char_type c)
>> +{
>> +    pointers& get = ptrs_.first();
>> +    if( get.ptr == get.beg )
>> +        throw bad_putback();
>> +    get.ptr -= 1;
>> +    *get.ptr = c;
>> +    return true;
>> +}
>> +
>> +template<typename Direct>
>>  inline std::streamsize direct_adapter<Direct>::write
>>      (const char_type* s, std::streamsize n)
>>  {
>>
>>
>>
>> Nikolay Mladenov
>> _______________________________________________
>> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk