blob: 8ecc9ca854ae7baf16dd88193d20104ef7bc0e90 [file] [log] [blame]
// Copyright 2018 The Chromium 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 COMPONENTS_ZUCCHINI_TYPE_ZTF_H_
#define COMPONENTS_ZUCCHINI_TYPE_ZTF_H_
#include <stddef.h>
#include <stdint.h>
namespace zucchini {
namespace ztf {
typedef int16_t dim_t;
// A exclusive upper bound on number of lines and/or columns. Throughout the ZTF
// code a dimension (dim) refers to a block of 1-3 digits which contain a line
// or column number.
enum : size_t { kMaxDimValue = 1000 };
enum SignChar : uint8_t {
kMinus = '-',
kPlus = '+',
};
// Lines and columns are 1-based to follow the convention of most modern text
// editing software. |line| and |col| should be positive, but int16_t is used to
// limit ranges such that it matches DeltaLineCol.
struct LineCol {
dim_t line;
dim_t col;
};
struct DeltaLineCol {
dim_t line;
dim_t col;
};
constexpr DeltaLineCol operator-(const LineCol& lhs, const LineCol& rhs) {
return DeltaLineCol{static_cast<dim_t>(lhs.line - rhs.line),
static_cast<dim_t>(lhs.col - rhs.col)};
}
constexpr LineCol operator+(const LineCol& lhs, const DeltaLineCol& rhs) {
return LineCol{static_cast<dim_t>(lhs.line + rhs.line),
static_cast<dim_t>(lhs.col + rhs.col)};
}
} // namespace ztf
} // namespace zucchini
#endif // COMPONENTS_ZUCCHINI_TYPE_ZTF_H_