/*
 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef WEBRTC_AUDIO_TIME_INTERVAL_H_
#define WEBRTC_AUDIO_TIME_INTERVAL_H_

#include <stdint.h>

#include "webrtc/rtc_base/optional.h"

namespace webrtc {

// This class logs the first and last time its Extend() function is called.
//
// This class is not thread-safe; Extend() calls should only be made by a
// single thread at a time, such as within a lock or destructor.
//
// Example usage:
//   // let x < y < z < u < v
//   rtc::TimeInterval interval;
//   ...  //   interval.Extend(); // at time x
//   ...
//   interval.Extend(); // at time y
//   ...
//   interval.Extend(); // at time u
//   ...
//   interval.Extend(z); // at time v
//   ...
//   if (!interval.Empty()) {
//     int64_t active_time = interval.Length(); // returns (u - x)
//   }
class TimeInterval {
 public:
  TimeInterval();
  ~TimeInterval();
  // Extend the interval with the current time.
  void Extend();
  // Extend the interval with a given time.
  void Extend(int64_t time);
  // Take the convex hull with another interval.
  void Extend(const TimeInterval& other_interval);
  // True iff Extend has never been called.
  bool Empty() const;
  // Returns the time between the first and the last tick, in milliseconds.
  int64_t Length() const;

 private:
  struct Interval {
    Interval(int64_t first, int64_t last);

    int64_t first, last;
  };
  rtc::Optional<Interval> interval_;
};

}  // namespace webrtc

#endif  // WEBRTC_AUDIO_TIME_INTERVAL_H_
