std::vector<double> PottsMeshReader<SPACE_DIM>::GetNextNode() { std::vector<double> node_data; std::string buffer; GetNextLineFromStream(mNodesFile, buffer); std::stringstream buffer_stream(buffer); unsigned index; buffer_stream >> index; unsigned offset = mIndexFromZero ? 0 : 1; if (index != mNodesRead + offset) { EXCEPTION("Data for node " << mNodesRead << " missing"); } double node_value; for (unsigned i=0; i<SPACE_DIM+1; i++) { buffer_stream >> node_value; node_data.push_back(node_value); } mNodesRead++; return node_data; }
virtual void do_send(const char * const buffer, size_t len) { const char * temp_buffer = buffer; size_t temp_length = len; const size_t MAX_DATA_LENGTH = 1024 * 60; BStream buffer_stream(65536); while (temp_length) { const size_t data_length = (temp_length > MAX_DATA_LENGTH) ? MAX_DATA_LENGTH : temp_length; uint8_t compressed_type = 0; uint16_t compressed_data_size = 0; this->mppc_enc.compress(reinterpret_cast<const uint8_t *>(temp_buffer), data_length, compressed_type, compressed_data_size, rdp_mppc_enc::MAX_COMPRESSED_DATA_SIZE_UNUSED); buffer_stream.reset(); buffer_stream.out_uint8(this->reset_compressor ? 1 : 0); this->reset_compressor = false; buffer_stream.out_uint8(compressed_type); if (compressed_type & PACKET_COMPRESSED) { buffer_stream.out_uint16_le(compressed_data_size); this->mppc_enc.get_compressed_data(buffer_stream); buffer_stream.mark_end(); this->target_transport.send(buffer_stream); } else { buffer_stream.out_uint16_le(data_length); buffer_stream.mark_end(); this->target_transport.send(buffer_stream); this->target_transport.send(temp_buffer, data_length); } temp_buffer += data_length; temp_length -= data_length; } }
ElementData PottsMeshReader<SPACE_DIM>::GetNextElementData() { // Create data structure for this element ElementData element_data; std::string buffer; GetNextLineFromStream(mElementsFile, buffer); std::stringstream buffer_stream(buffer); unsigned element_index; buffer_stream >> element_index; unsigned offset = mIndexFromZero ? 0 : 1; if (element_index != mElementsRead + offset) { EXCEPTION("Data for element " << mElementsRead << " missing"); } unsigned num_nodes_in_element; buffer_stream >> num_nodes_in_element; // Store node indices owned by this element unsigned node_index; for (unsigned i=0; i<num_nodes_in_element; i++) { buffer_stream >> node_index; element_data.NodeIndices.push_back(node_index - offset); } if (mNumElementAttributes > 0) { assert(mNumElementAttributes==1); unsigned attribute_value; buffer_stream >> attribute_value; element_data.AttributeValue = attribute_value; }
void send_to_target() { if (!this->compressed_data_length) return; BStream buffer_stream(128); buffer_stream.out_uint8(this->reset_compressor ? 1 : 0); this->reset_compressor = false; buffer_stream.out_uint32_le(this->compressed_data_length); if (this->verbose) { LOG( LOG_INFO , "GZipCompressionOutTransport::send_to_target: compressed_data_length=%u" , this->compressed_data_length); } buffer_stream.mark_end(); this->target_transport.send(buffer_stream); this->target_transport.send(this->compressed_data, this->compressed_data_length); this->compressed_data_length = 0; }