~ubuntu-branches/ubuntu/quantal/llvm-3.1/quantal

« back to all changes in this revision

Viewing changes to tools/llvm-diff/DiffLog.h

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2012-03-29 19:09:51 UTC
  • Revision ID: package-import@ubuntu.com-20120329190951-aq83ivog4cg8bxun
Tags: upstream-3.1~svn153643
ImportĀ upstreamĀ versionĀ 3.1~svn153643

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===-- DiffLog.h - Difference Log Builder and accessories ------*- C++ -*-===//
 
2
//
 
3
//                     The LLVM Compiler Infrastructure
 
4
//
 
5
// This file is distributed under the University of Illinois Open Source
 
6
// License. See LICENSE.TXT for details.
 
7
//
 
8
//===----------------------------------------------------------------------===//
 
9
//
 
10
// This header defines the interface to the LLVM difference log builder.
 
11
//
 
12
//===----------------------------------------------------------------------===//
 
13
 
 
14
#ifndef _LLVM_DIFFLOG_H_
 
15
#define _LLVM_DIFFLOG_H_
 
16
 
 
17
#include "llvm/ADT/SmallVector.h"
 
18
#include "llvm/ADT/StringRef.h"
 
19
 
 
20
namespace llvm {
 
21
  class Instruction;
 
22
  class Value;
 
23
  class Consumer;
 
24
 
 
25
  /// Trichotomy assumption
 
26
  enum DiffChange { DC_match, DC_left, DC_right };
 
27
 
 
28
  /// A temporary-object class for building up log messages.
 
29
  class LogBuilder {
 
30
    Consumer &consumer;
 
31
 
 
32
    /// The use of a stored StringRef here is okay because
 
33
    /// LogBuilder should be used only as a temporary, and as a
 
34
    /// temporary it will be destructed before whatever temporary
 
35
    /// might be initializing this format.
 
36
    StringRef Format;
 
37
 
 
38
    SmallVector<Value*, 4> Arguments;
 
39
 
 
40
  public:
 
41
    LogBuilder(Consumer &c, StringRef Format)
 
42
      : consumer(c), Format(Format) {}
 
43
 
 
44
    LogBuilder &operator<<(Value *V) {
 
45
      Arguments.push_back(V);
 
46
      return *this;
 
47
    }
 
48
 
 
49
    ~LogBuilder();
 
50
 
 
51
    StringRef getFormat() const;
 
52
    unsigned getNumArguments() const;
 
53
    Value *getArgument(unsigned I) const;
 
54
  };
 
55
 
 
56
  /// A temporary-object class for building up diff messages.
 
57
  class DiffLogBuilder {
 
58
    typedef std::pair<Instruction*,Instruction*> DiffRecord;
 
59
    SmallVector<DiffRecord, 20> Diff;
 
60
 
 
61
    Consumer &consumer;
 
62
 
 
63
  public:
 
64
    DiffLogBuilder(Consumer &c) : consumer(c) {}
 
65
    ~DiffLogBuilder();
 
66
 
 
67
    void addMatch(Instruction *L, Instruction *R);
 
68
    // HACK: VS 2010 has a bug in the stdlib that requires this.
 
69
    void addLeft(Instruction *L);
 
70
    void addRight(Instruction *R);
 
71
 
 
72
    unsigned getNumLines() const;
 
73
    DiffChange getLineKind(unsigned I) const;
 
74
    Instruction *getLeft(unsigned I) const;
 
75
    Instruction *getRight(unsigned I) const;
 
76
  };
 
77
 
 
78
}
 
79
 
 
80
#endif