protoio.hh revision 9397
19397Sandreas.hansson@arm.com/* 29397Sandreas.hansson@arm.com * Copyright (c) 2012 ARM Limited 39397Sandreas.hansson@arm.com * All rights reserved 49397Sandreas.hansson@arm.com * 59397Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall 69397Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual 79397Sandreas.hansson@arm.com * property including but not limited to intellectual property relating 89397Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software 99397Sandreas.hansson@arm.com * licensed hereunder. You may use the software subject to the license 109397Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated 119397Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software, 129397Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form. 139397Sandreas.hansson@arm.com * 149397Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 159397Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 169397Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 179397Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 189397Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 199397Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 209397Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 219397Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 229397Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 239397Sandreas.hansson@arm.com * this software without specific prior written permission. 249397Sandreas.hansson@arm.com * 259397Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 269397Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 279397Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 289397Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 299397Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 309397Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 319397Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 329397Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 339397Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 349397Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 359397Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 369397Sandreas.hansson@arm.com * 379397Sandreas.hansson@arm.com * Authors: Andreas Hansson 389397Sandreas.hansson@arm.com */ 399397Sandreas.hansson@arm.com 409397Sandreas.hansson@arm.com 419397Sandreas.hansson@arm.com/** 429397Sandreas.hansson@arm.com * @file 439397Sandreas.hansson@arm.com * Declaration of a wrapper for protobuf output streams. 449397Sandreas.hansson@arm.com */ 459397Sandreas.hansson@arm.com 469397Sandreas.hansson@arm.com#ifndef __PROTO_PROTOIO_HH__ 479397Sandreas.hansson@arm.com#define __PROTO_PROTOIO_HH__ 489397Sandreas.hansson@arm.com 499397Sandreas.hansson@arm.com#include <google/protobuf/io/coded_stream.h> 509397Sandreas.hansson@arm.com#include <google/protobuf/io/gzip_stream.h> 519397Sandreas.hansson@arm.com#include <google/protobuf/io/zero_copy_stream_impl.h> 529397Sandreas.hansson@arm.com#include <google/protobuf/message.h> 539397Sandreas.hansson@arm.com 549397Sandreas.hansson@arm.com#include <fstream> 559397Sandreas.hansson@arm.com 569397Sandreas.hansson@arm.com/** 579397Sandreas.hansson@arm.com * A ProtoOutputStream wraps a coded stream, potentially with 589397Sandreas.hansson@arm.com * compression, based on looking at the file name. Writing to the 599397Sandreas.hansson@arm.com * stream is done to enable interaction with the file on a per-message 609397Sandreas.hansson@arm.com * basis to avoid having to deal with huge data structures. The latter 619397Sandreas.hansson@arm.com * is made possible by encoding the length of each message in the 629397Sandreas.hansson@arm.com * stream. 639397Sandreas.hansson@arm.com */ 649397Sandreas.hansson@arm.comclass ProtoOutputStream 659397Sandreas.hansson@arm.com{ 669397Sandreas.hansson@arm.com 679397Sandreas.hansson@arm.com public: 689397Sandreas.hansson@arm.com 699397Sandreas.hansson@arm.com /** 709397Sandreas.hansson@arm.com * Create an output stream for a given file name. If the filename 719397Sandreas.hansson@arm.com * ends with .gz then the file will be compressed accordinly. 729397Sandreas.hansson@arm.com * 739397Sandreas.hansson@arm.com * @param filename Path to the file to create or truncate 749397Sandreas.hansson@arm.com */ 759397Sandreas.hansson@arm.com ProtoOutputStream(const std::string& filename); 769397Sandreas.hansson@arm.com 779397Sandreas.hansson@arm.com /** 789397Sandreas.hansson@arm.com * Destruct the output stream, and also flush and close the 799397Sandreas.hansson@arm.com * underlying file streams and coded streams. 809397Sandreas.hansson@arm.com */ 819397Sandreas.hansson@arm.com ~ProtoOutputStream(); 829397Sandreas.hansson@arm.com 839397Sandreas.hansson@arm.com /** 849397Sandreas.hansson@arm.com * Write a message to the stream, preprending it with the message 859397Sandreas.hansson@arm.com * size. 869397Sandreas.hansson@arm.com * 879397Sandreas.hansson@arm.com * @param msg Message to write to the stream 889397Sandreas.hansson@arm.com */ 899397Sandreas.hansson@arm.com void write(const google::protobuf::Message& msg); 909397Sandreas.hansson@arm.com 919397Sandreas.hansson@arm.com private: 929397Sandreas.hansson@arm.com 939397Sandreas.hansson@arm.com /// Underlying file output stream 949397Sandreas.hansson@arm.com std::ofstream fileStream; 959397Sandreas.hansson@arm.com 969397Sandreas.hansson@arm.com /// Zero Copy stream wrapping the STL output stream 979397Sandreas.hansson@arm.com google::protobuf::io::OstreamOutputStream* zeroCopyStream; 989397Sandreas.hansson@arm.com 999397Sandreas.hansson@arm.com /// Optional Gzip stream to wrap the Zero Copy stream 1009397Sandreas.hansson@arm.com google::protobuf::io::GzipOutputStream* gzipStream; 1019397Sandreas.hansson@arm.com 1029397Sandreas.hansson@arm.com /// Top-level coded stream that messages are written to 1039397Sandreas.hansson@arm.com google::protobuf::io::CodedOutputStream* codedStream; 1049397Sandreas.hansson@arm.com 1059397Sandreas.hansson@arm.com}; 1069397Sandreas.hansson@arm.com 1079397Sandreas.hansson@arm.com#endif //__PROTO_PROTOIO_HH 108