/*
* Copyright 2013 ZXing authors
*
* 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.
*/
namespace ZXing.PDF417.Internal
{
///
/// A Codeword in the PDF417 barcode
///
/// Guenther Grau
public sealed class Codeword
{
///
/// Default value for the RowNumber (-1 being an invalid real number)
///
private static readonly int BARCODE_ROW_UNKNOWN = -1;
public int StartX { get; private set; }
public int EndX { get; private set; }
public int Bucket { get; private set; }
public int Value { get; private set; }
public int RowNumber { get; set; }
///
/// Initializes a new instance of the class.
///
/// Start x.
/// End x.
/// Bucket.
/// Value.
public Codeword(int startX, int endX, int bucket, int value)
{
this.StartX = startX;
this.EndX = endX;
this.Bucket = bucket;
this.Value = value;
this.RowNumber = BARCODE_ROW_UNKNOWN;
}
///
/// Gets the width.
///
/// The width.
public int Width
{
get { return EndX - StartX; }
}
///
/// Gets a value indicating whether this instance has valid row number.
///
/// true if this instance has valid row number; otherwise, false.
public bool HasValidRowNumber
{
get { return IsValidRowNumber(RowNumber); }
}
///
/// Determines whether this instance is valid row number the specified rowNumber.
///
/// true if this instance is valid row number the specified rowNumber; otherwise, false.
/// Row number.
public bool IsValidRowNumber(int rowNumber)
{
return rowNumber != BARCODE_ROW_UNKNOWN && Bucket == (rowNumber%3)*3;
}
///
/// Sets the row number as the row's indicator column.
///
public void setRowNumberAsRowIndicatorColumn()
{
this.RowNumber = (Value/30)*3 + Bucket/3;
}
///
/// Returns a that represents the current .
///
/// A that represents the current .
public override string ToString()
{
return RowNumber + "|" + Value;
}
}
}