/**
* Copyright 2017 LinkedIn Corp. All rights reserved.
*
* 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.
*/
package com.github.ambry.store;
/**
* A TimeRange is the range between two times in milliseconds
*/
public class TimeRange {
private final long startTimeInMs;
private final long endTimeInMs;
/**
* Instantiates a {@link TimeRange} referring to a reference time with an allowed error margin
* @param referenceTimeInMs the reference time in milliseconds that this {@link TimeRange} is referring to
* @param errorMarginInMs the allowable error margin in milliseconds
*/
public TimeRange(long referenceTimeInMs, long errorMarginInMs) {
if (errorMarginInMs < 0 || referenceTimeInMs < 0 || referenceTimeInMs - errorMarginInMs < 0
|| referenceTimeInMs > Long.MAX_VALUE - errorMarginInMs) {
throw new IllegalArgumentException(
"Illegal reference time: " + referenceTimeInMs + " and/or error margin: " + errorMarginInMs);
}
startTimeInMs = referenceTimeInMs - errorMarginInMs;
endTimeInMs = referenceTimeInMs + errorMarginInMs;
}
/**
* @return the start time in Secs that this {@link TimeRange} is referring to
*/
public long getStartTimeInMs() {
return startTimeInMs;
}
/**
* @return the end time in Secs that this {@link TimeRange} is referring to
*/
public long getEndTimeInMs() {
return endTimeInMs;
}
}