Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- FileOffset.h - Offset in a file --------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
 
9
#ifndef LLVM_CLANG_EDIT_FILEOFFSET_H
10
#define LLVM_CLANG_EDIT_FILEOFFSET_H
11
 
12
#include "clang/Basic/SourceLocation.h"
13
#include <tuple>
14
 
15
namespace clang {
16
namespace edit {
17
 
18
class FileOffset {
19
  FileID FID;
20
  unsigned Offs = 0;
21
 
22
public:
23
  FileOffset() = default;
24
  FileOffset(FileID fid, unsigned offs) : FID(fid), Offs(offs) {}
25
 
26
  bool isInvalid() const { return FID.isInvalid(); }
27
 
28
  FileID getFID() const { return FID; }
29
  unsigned getOffset() const { return Offs; }
30
 
31
  FileOffset getWithOffset(unsigned offset) const {
32
    FileOffset NewOffs = *this;
33
    NewOffs.Offs += offset;
34
    return NewOffs;
35
  }
36
 
37
  friend bool operator==(FileOffset LHS, FileOffset RHS) {
38
    return LHS.FID == RHS.FID && LHS.Offs == RHS.Offs;
39
  }
40
 
41
  friend bool operator!=(FileOffset LHS, FileOffset RHS) {
42
    return !(LHS == RHS);
43
  }
44
 
45
  friend bool operator<(FileOffset LHS, FileOffset RHS) {
46
    return std::tie(LHS.FID, LHS.Offs) < std::tie(RHS.FID, RHS.Offs);
47
  }
48
 
49
  friend bool operator>(FileOffset LHS, FileOffset RHS) {
50
    return RHS < LHS;
51
  }
52
 
53
  friend bool operator>=(FileOffset LHS, FileOffset RHS) {
54
    return !(LHS < RHS);
55
  }
56
 
57
  friend bool operator<=(FileOffset LHS, FileOffset RHS) {
58
    return !(RHS < LHS);
59
  }
60
};
61
 
62
} // namespace edit
63
} // namespace clang
64
 
65
#endif // LLVM_CLANG_EDIT_FILEOFFSET_H