1234287Sdim//===----- FileOffset.h - Offset in a file ----------------------*- C++ -*-===//
2234287Sdim//
3234287Sdim//                     The LLVM Compiler Infrastructure
4234287Sdim//
5234287Sdim// This file is distributed under the University of Illinois Open Source
6234287Sdim// License. See LICENSE.TXT for details.
7234287Sdim//
8234287Sdim//===----------------------------------------------------------------------===//
9234287Sdim
10234287Sdim#ifndef LLVM_CLANG_EDIT_FILEOFFSET_H
11234287Sdim#define LLVM_CLANG_EDIT_FILEOFFSET_H
12234287Sdim
13234287Sdim#include "clang/Basic/SourceLocation.h"
14234287Sdim
15234287Sdimnamespace clang {
16234287Sdim
17234287Sdimnamespace edit {
18234287Sdim
19234287Sdimclass FileOffset {
20234287Sdim  FileID FID;
21234287Sdim  unsigned Offs;
22234287Sdimpublic:
23234287Sdim  FileOffset() : Offs(0) { }
24234287Sdim  FileOffset(FileID fid, unsigned offs) : FID(fid), Offs(offs) { }
25234287Sdim
26234287Sdim  bool isInvalid() const { return FID.isInvalid(); }
27234287Sdim
28234287Sdim  FileID getFID() const { return FID; }
29234287Sdim  unsigned getOffset() const { return Offs; }
30234287Sdim
31234287Sdim  FileOffset getWithOffset(unsigned offset) const {
32234287Sdim    FileOffset NewOffs = *this;
33234287Sdim    NewOffs.Offs += offset;
34234287Sdim    return NewOffs;
35234287Sdim  }
36234287Sdim
37234287Sdim  friend bool operator==(FileOffset LHS, FileOffset RHS) {
38234287Sdim    return LHS.FID == RHS.FID && LHS.Offs == RHS.Offs;
39234287Sdim  }
40234287Sdim  friend bool operator!=(FileOffset LHS, FileOffset RHS) {
41234287Sdim    return !(LHS == RHS);
42234287Sdim  }
43234287Sdim  friend bool operator<(FileOffset LHS, FileOffset RHS) {
44234287Sdim    if (LHS.FID != RHS.FID)
45234287Sdim      return LHS.FID < RHS.FID;
46234287Sdim    return LHS.Offs < RHS.Offs;
47234287Sdim  }
48234287Sdim  friend bool operator>(FileOffset LHS, FileOffset RHS) {
49234287Sdim    if (LHS.FID != RHS.FID)
50234287Sdim      return LHS.FID > RHS.FID;
51234287Sdim    return LHS.Offs > RHS.Offs;
52234287Sdim  }
53234287Sdim  friend bool operator>=(FileOffset LHS, FileOffset RHS) {
54234287Sdim    return LHS > RHS || LHS == RHS;
55234287Sdim  }
56234287Sdim  friend bool operator<=(FileOffset LHS, FileOffset RHS) {
57234287Sdim    return LHS < RHS || LHS == RHS;
58234287Sdim  }
59234287Sdim};
60234287Sdim
61234287Sdim}
62234287Sdim
63234287Sdim} // end namespace clang
64234287Sdim
65234287Sdim#endif
66