1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file. 4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#ifndef TOOLS_GN_OUTPUT_STREAM_H_ 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#define TOOLS_GN_OUTPUT_STREAM_H_ 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass OutputStream { 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch public: 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch OutputStream& WriteBuffer(const char* buf, size_t len); 14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch OutputStream& WriteInt(int i); 15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Write a literal. 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // This template expansion prevents having to look for nulls. 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch template<size_t size> OutputStream& Write(const char (&buf)[size]) { 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return WriteBuffer(buf, size); 20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Write a literal string. 23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch OutputStream& Write(const std::string& str) { 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return WriteBuffer(str.c_str(), str.size()); 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Quotes if necessary, and does necessary escaping. If more than one 28d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // input is provided, the results will be concatenated together (useful 29d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // for constructing paths without a temporary buffer). 30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch OutputStream& WritePath(const std::string& s); 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch OutputStream& WritePath(const std::string& s0, 32d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const std::string& s1); 33d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch OutputStream& WritePath(const std::string& s0, 34d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const std::string& s1, 35d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const std::string& s2); 36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 37d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch OutputStream& EndLine() { 38d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch return WriteBuffer("\n", 1); 39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch } 40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}; 41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#endif // TOOLS_GN_OUTPUT_STREAM_H_ 43