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