/*Copyright 2016.year Open Networking Laboratory

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 org.onosproject.yangutils.datamodel;

import org.onosproject.yangutils.utils.builtindatatype.YangBuiltInDataTypeInfo;

/**
 * Represents single interval information of a range.
 *
 * @param <T> range type based on the data type
 */
public class YangRangeInterval<T extends YangBuiltInDataTypeInfo<T>> {

    /**
     * Starting value of the range interval.
     */
    private T startValue;

    /**
     * Last value of the range interval.
     */
    private T endValue;

    /**
     * Creates YANG range interval object.
     */
    public YangRangeInterval() {
    }

    /**
     * Returns the starting value of the range interval.
     *
     * @return the starting value of the range interval
     */
    public T getStartValue() {
        return startValue;
    }

    /**
     * Sets the starting value of the range interval.
     *
     * @param startValue the starting value of the range interval
     */
    public void setStartValue(T startValue) {
        this.startValue = startValue;
    }

    /**
     * Returns the last value of the range interval.
     *
     * @return last value of the range interval
     */
    public T getEndValue() {
        return endValue;
    }

    /**
     * Sets the last value of the range interval.
     *
     * @param endValue last value of the range interval
     */
    public void setEndValue(T endValue) {
        this.endValue = endValue;
    }

}
