MacroBuilder.h revision 245431
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
18202879Srdivacky#include "llvm/ADT/Twine.h"
19202879Srdivacky#include "llvm/Support/raw_ostream.h"
20202879Srdivacky
21202879Srdivackynamespace clang {
22202879Srdivacky
23202879Srdivackyclass MacroBuilder {
24226890Sdim  raw_ostream &Out;
25202879Srdivackypublic:
26226890Sdim  MacroBuilder(raw_ostream &Output) : Out(Output) {}
27202879Srdivacky
28245431Sdim  /// Append a \#define line for macro of the form "\#define Name Value\n".
29226890Sdim  void defineMacro(const Twine &Name, const Twine &Value = "1") {
30202879Srdivacky    Out << "#define " << Name << ' ' << Value << '\n';
31202879Srdivacky  }
32202879Srdivacky
33245431Sdim  /// Append a \#undef line for Name.  Name should be of the form XXX
34245431Sdim  /// and we emit "\#undef XXX".
35226890Sdim  void undefineMacro(const Twine &Name) {
36202879Srdivacky    Out << "#undef " << Name << '\n';
37202879Srdivacky  }
38202879Srdivacky
39202879Srdivacky  /// Directly append Str and a newline to the underlying buffer.
40226890Sdim  void append(const Twine &Str) {
41202879Srdivacky    Out << Str << '\n';
42202879Srdivacky  }
43202879Srdivacky};
44202879Srdivacky
45202879Srdivacky}  // end namespace clang
46202879Srdivacky
47202879Srdivacky#endif
48