130660a898545416f0fea2d717f16f75640001e38Ted Kremenek//===----- FileOffset.h - Offset in a file ----------------------*- C++ -*-===//
230660a898545416f0fea2d717f16f75640001e38Ted Kremenek//
330660a898545416f0fea2d717f16f75640001e38Ted Kremenek//                     The LLVM Compiler Infrastructure
430660a898545416f0fea2d717f16f75640001e38Ted Kremenek//
530660a898545416f0fea2d717f16f75640001e38Ted Kremenek// This file is distributed under the University of Illinois Open Source
630660a898545416f0fea2d717f16f75640001e38Ted Kremenek// License. See LICENSE.TXT for details.
730660a898545416f0fea2d717f16f75640001e38Ted Kremenek//
830660a898545416f0fea2d717f16f75640001e38Ted Kremenek//===----------------------------------------------------------------------===//
930660a898545416f0fea2d717f16f75640001e38Ted Kremenek
1030660a898545416f0fea2d717f16f75640001e38Ted Kremenek#ifndef LLVM_CLANG_EDIT_FILEOFFSET_H
1130660a898545416f0fea2d717f16f75640001e38Ted Kremenek#define LLVM_CLANG_EDIT_FILEOFFSET_H
1230660a898545416f0fea2d717f16f75640001e38Ted Kremenek
1330660a898545416f0fea2d717f16f75640001e38Ted Kremenek#include "clang/Basic/SourceLocation.h"
1430660a898545416f0fea2d717f16f75640001e38Ted Kremenek
1530660a898545416f0fea2d717f16f75640001e38Ted Kremeneknamespace clang {
1630660a898545416f0fea2d717f16f75640001e38Ted Kremenek
1730660a898545416f0fea2d717f16f75640001e38Ted Kremeneknamespace edit {
1830660a898545416f0fea2d717f16f75640001e38Ted Kremenek
1930660a898545416f0fea2d717f16f75640001e38Ted Kremenekclass FileOffset {
2030660a898545416f0fea2d717f16f75640001e38Ted Kremenek  FileID FID;
2130660a898545416f0fea2d717f16f75640001e38Ted Kremenek  unsigned Offs;
2230660a898545416f0fea2d717f16f75640001e38Ted Kremenekpublic:
2330660a898545416f0fea2d717f16f75640001e38Ted Kremenek  FileOffset() : Offs(0) { }
2430660a898545416f0fea2d717f16f75640001e38Ted Kremenek  FileOffset(FileID fid, unsigned offs) : FID(fid), Offs(offs) { }
2530660a898545416f0fea2d717f16f75640001e38Ted Kremenek
2630660a898545416f0fea2d717f16f75640001e38Ted Kremenek  bool isInvalid() const { return FID.isInvalid(); }
2730660a898545416f0fea2d717f16f75640001e38Ted Kremenek
2830660a898545416f0fea2d717f16f75640001e38Ted Kremenek  FileID getFID() const { return FID; }
2930660a898545416f0fea2d717f16f75640001e38Ted Kremenek  unsigned getOffset() const { return Offs; }
3030660a898545416f0fea2d717f16f75640001e38Ted Kremenek
3130660a898545416f0fea2d717f16f75640001e38Ted Kremenek  FileOffset getWithOffset(unsigned offset) const {
3230660a898545416f0fea2d717f16f75640001e38Ted Kremenek    FileOffset NewOffs = *this;
3330660a898545416f0fea2d717f16f75640001e38Ted Kremenek    NewOffs.Offs += offset;
3430660a898545416f0fea2d717f16f75640001e38Ted Kremenek    return NewOffs;
3530660a898545416f0fea2d717f16f75640001e38Ted Kremenek  }
3630660a898545416f0fea2d717f16f75640001e38Ted Kremenek
3730660a898545416f0fea2d717f16f75640001e38Ted Kremenek  friend bool operator==(FileOffset LHS, FileOffset RHS) {
3830660a898545416f0fea2d717f16f75640001e38Ted Kremenek    return LHS.FID == RHS.FID && LHS.Offs == RHS.Offs;
3930660a898545416f0fea2d717f16f75640001e38Ted Kremenek  }
4030660a898545416f0fea2d717f16f75640001e38Ted Kremenek  friend bool operator!=(FileOffset LHS, FileOffset RHS) {
4130660a898545416f0fea2d717f16f75640001e38Ted Kremenek    return !(LHS == RHS);
4230660a898545416f0fea2d717f16f75640001e38Ted Kremenek  }
4330660a898545416f0fea2d717f16f75640001e38Ted Kremenek  friend bool operator<(FileOffset LHS, FileOffset RHS) {
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    return std::tie(LHS.FID, LHS.Offs) < std::tie(RHS.FID, RHS.Offs);
4530660a898545416f0fea2d717f16f75640001e38Ted Kremenek  }
4630660a898545416f0fea2d717f16f75640001e38Ted Kremenek  friend bool operator>(FileOffset LHS, FileOffset RHS) {
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    return RHS < LHS;
4830660a898545416f0fea2d717f16f75640001e38Ted Kremenek  }
4930660a898545416f0fea2d717f16f75640001e38Ted Kremenek  friend bool operator>=(FileOffset LHS, FileOffset RHS) {
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    return !(LHS < RHS);
5130660a898545416f0fea2d717f16f75640001e38Ted Kremenek  }
5230660a898545416f0fea2d717f16f75640001e38Ted Kremenek  friend bool operator<=(FileOffset LHS, FileOffset RHS) {
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    return !(RHS < LHS);
5430660a898545416f0fea2d717f16f75640001e38Ted Kremenek  }
5530660a898545416f0fea2d717f16f75640001e38Ted Kremenek};
5630660a898545416f0fea2d717f16f75640001e38Ted Kremenek
5730660a898545416f0fea2d717f16f75640001e38Ted Kremenek}
5830660a898545416f0fea2d717f16f75640001e38Ted Kremenek
5930660a898545416f0fea2d717f16f75640001e38Ted Kremenek} // end namespace clang
6030660a898545416f0fea2d717f16f75640001e38Ted Kremenek
6130660a898545416f0fea2d717f16f75640001e38Ted Kremenek#endif
62