// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package common

// Location interface to represent a location within Source.
type Location interface {
	Line() int   // 1-based line number within source.
	Column() int // 0-based column number within source.
}

// SourceLocation helper type to manually construct a location.
type SourceLocation struct {
	line   int
	column int
}

var (
	// Location implements the SourcceLocation interface.
	_ Location = &SourceLocation{}
	// NoLocation is a particular illegal location.
	NoLocation = &SourceLocation{-1, -1}
)

// NewLocation creates a new location.
func NewLocation(line, column int) Location {
	return &SourceLocation{
		line:   line,
		column: column}
}

// Line returns the 1-based line of the location.
func (l *SourceLocation) Line() int {
	return l.line
}

// Column returns the 0-based column number of the location.
func (l *SourceLocation) Column() int {
	return l.column
}
