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) { 4430660a898545416f0fea2d717f16f75640001e38Ted Kremenek if (LHS.FID != RHS.FID) 4530660a898545416f0fea2d717f16f75640001e38Ted Kremenek return LHS.FID < RHS.FID; 4630660a898545416f0fea2d717f16f75640001e38Ted Kremenek return LHS.Offs < RHS.Offs; 4730660a898545416f0fea2d717f16f75640001e38Ted Kremenek } 4830660a898545416f0fea2d717f16f75640001e38Ted Kremenek friend bool operator>(FileOffset LHS, FileOffset RHS) { 4930660a898545416f0fea2d717f16f75640001e38Ted Kremenek if (LHS.FID != RHS.FID) 5030660a898545416f0fea2d717f16f75640001e38Ted Kremenek return LHS.FID > RHS.FID; 5130660a898545416f0fea2d717f16f75640001e38Ted Kremenek return LHS.Offs > RHS.Offs; 5230660a898545416f0fea2d717f16f75640001e38Ted Kremenek } 5330660a898545416f0fea2d717f16f75640001e38Ted Kremenek friend bool operator>=(FileOffset LHS, FileOffset RHS) { 5430660a898545416f0fea2d717f16f75640001e38Ted Kremenek return LHS > RHS || LHS == RHS; 5530660a898545416f0fea2d717f16f75640001e38Ted Kremenek } 5630660a898545416f0fea2d717f16f75640001e38Ted Kremenek friend bool operator<=(FileOffset LHS, FileOffset RHS) { 5730660a898545416f0fea2d717f16f75640001e38Ted Kremenek return LHS < RHS || LHS == RHS; 5830660a898545416f0fea2d717f16f75640001e38Ted Kremenek } 5930660a898545416f0fea2d717f16f75640001e38Ted Kremenek}; 6030660a898545416f0fea2d717f16f75640001e38Ted Kremenek 6130660a898545416f0fea2d717f16f75640001e38Ted Kremenek} 6230660a898545416f0fea2d717f16f75640001e38Ted Kremenek 6330660a898545416f0fea2d717f16f75640001e38Ted Kremenek} // end namespace clang 6430660a898545416f0fea2d717f16f75640001e38Ted Kremenek 6530660a898545416f0fea2d717f16f75640001e38Ted Kremenek#endif 66