1202879Srdivacky//===--- MacroBuilder.h - CPP Macro building utility ------------*- C++ -*-===//
2202879Srdivacky//
3202879Srdivacky//                     The LLVM Compiler Infrastructure
4202879Srdivacky//
5202879Srdivacky// This file is distributed under the University of Illinois Open Source
6202879Srdivacky// License. See LICENSE.TXT for details.
7202879Srdivacky//
8202879Srdivacky//===----------------------------------------------------------------------===//
9245431Sdim///
10245431Sdim/// \file
11245431Sdim/// \brief Defines the clang::MacroBuilder utility class.
12245431Sdim///
13202879Srdivacky//===----------------------------------------------------------------------===//
14202879Srdivacky
15202879Srdivacky#ifndef LLVM_CLANG_BASIC_MACROBUILDER_H
16202879Srdivacky#define LLVM_CLANG_BASIC_MACROBUILDER_H
17202879Srdivacky
18252723Sdim#include "clang/Basic/LLVM.h"
19202879Srdivacky#include "llvm/ADT/Twine.h"
20202879Srdivacky#include "llvm/Support/raw_ostream.h"
21202879Srdivacky
22202879Srdivackynamespace clang {
23202879Srdivacky
24202879Srdivackyclass MacroBuilder {
25226890Sdim  raw_ostream &Out;
26202879Srdivackypublic:
27226890Sdim  MacroBuilder(raw_ostream &Output) : Out(Output) {}
28202879Srdivacky
29245431Sdim  /// Append a \#define line for macro of the form "\#define Name Value\n".
30226890Sdim  void defineMacro(const Twine &Name, const Twine &Value = "1") {
31202879Srdivacky    Out << "#define " << Name << ' ' << Value << '\n';
32202879Srdivacky  }
33202879Srdivacky
34245431Sdim  /// Append a \#undef line for Name.  Name should be of the form XXX
35245431Sdim  /// and we emit "\#undef XXX".
36226890Sdim  void undefineMacro(const Twine &Name) {
37202879Srdivacky    Out << "#undef " << Name << '\n';
38202879Srdivacky  }
39202879Srdivacky
40202879Srdivacky  /// Directly append Str and a newline to the underlying buffer.
41226890Sdim  void append(const Twine &Str) {
42202879Srdivacky    Out << Str << '\n';
43202879Srdivacky  }
44202879Srdivacky};
45202879Srdivacky
46202879Srdivacky}  // end namespace clang
47202879Srdivacky
48202879Srdivacky#endif
49