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