//
// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

#ifndef COMPILER_PREPROCESSOR_SOURCE_LOCATION_H_
#define COMPILER_PREPROCESSOR_SOURCE_LOCATION_H_

namespace pp
{

struct SourceLocation
{
    SourceLocation() : file(0), line(0) { }
    SourceLocation(int f, int l) : file(f), line(l) { }

    bool equals(const SourceLocation& other) const
    {
        return (file == other.file) && (line == other.line);
    }

    int file;
    int line;
};

inline bool operator==(const SourceLocation& lhs, const SourceLocation& rhs)
{
    return lhs.equals(rhs);
}

inline bool operator!=(const SourceLocation& lhs, const SourceLocation& rhs)
{
    return !lhs.equals(rhs);
}

}  // namespace pp
#endif  // COMPILER_PREPROCESSOR_SOURCE_LOCATION_H_
