Example #1
0
 output_container(Container& cont,
     std::vector<serialization_chunk>* chunks,
     binary_filter* filter)
     : cont_(cont), current_(0), start_compressing_at_(0), filter_(0),
       chunks_(chunks), current_chunk_(std::size_t(-1))
 {
     if (chunks_)
     {
         // reuse chunks, if possible
         if (chunks->empty())
             chunks_->push_back(create_index_chunk(0, 0));
         else
             (*chunks_)[0] = create_index_chunk(0, 0);
         current_chunk_ = 0;
     }
 }
Example #2
0
        void save_binary(void const* address, std::size_t count) // override
        {
            HPX_ASSERT(count != 0);
            {
                if (filter_) {
                    filter_->save(address, count);
                }
                else {
                    // make sure there is a current serialization_chunk descriptor
                    // available
                    if (chunks_)
                    {
                        HPX_ASSERT(get_num_chunks() > current_chunk_);
                        if (get_chunk_type(current_chunk_) == chunk_type_pointer ||
                            get_chunk_size(current_chunk_) != 0)
                        {
                            // add a new serialization_chunk
                            chunks_->push_back(create_index_chunk(current_, 0));
                            ++current_chunk_;
                        }
                    }

                    if (cont_.size() < current_ + count)
                        cont_.resize(cont_.size() + count);

                    if (count == 1)
                        cont_[current_] = *static_cast<unsigned char const*>(address);
                    else
                        std::memcpy(&cont_[current_], address, count);
                }
                current_ += count;
            }
        }
Example #3
0
        void save_binary(void const* address, std::size_t count) // override
        {
            HPX_ASSERT(count != 0);
            {
                if (filter_) {
                    filter_->save(address, count);
                }
                else {
                    // make sure there is a current serialization_chunk descriptor
                    // available
                    if (chunks_)
                    {
                        HPX_ASSERT(get_num_chunks() > current_chunk_);
                        if (get_chunk_type(current_chunk_) == chunk_type_pointer ||
                            get_chunk_size(current_chunk_) != 0)
                        {
                            // add a new serialization_chunk, reuse chunks,
                            // if possible
                            // the chunk size will be set at the end
                            if (chunks_->size() <= current_chunk_ + 1)
                            {
                                chunks_->push_back(
                                    create_index_chunk(current_, 0));
                                ++current_chunk_;
                            }
                            else
                            {
                                (*chunks_)[++current_chunk_] =
                                    create_index_chunk(current_, 0);
                            }
                        }
                    }

                    if (cont_.size() < current_ + count)
                        cont_.resize(cont_.size() + count);

                    detail::access_data<Container>::write(
                        cont_, count, current_, address);
                }
                current_ += count;
            }
        }
Example #4
0
 output_container(Container& cont,
     std::vector<serialization_chunk>* chunks,
     binary_filter* filter)
     : cont_(cont), current_(0), start_compressing_at_(0), filter_(0),
       chunks_(chunks), current_chunk_(std::size_t(-1))
 {
     if (chunks_)
     {
         chunks_->clear();
         chunks_->push_back(create_index_chunk(0, 0));
         current_chunk_ = 0;
     }
 }