///////////////////////////////////////////////////////////////////////////////
//
//  The contents of this file are subject to the Mozilla Public License
//  Version 1.1 (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.mozilla.org/MPL/
//
//  Software distributed under the License is distributed on an "AS IS"
//  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
//  License for the specific language governing rights and limitations
//  under the License.
//
//  The Original Code is MP4v2.
//
//  The Initial Developer of the Original Code is Kona Blend.
//  Portions created by Kona Blend are Copyright (C) 2008.
//  All Rights Reserved.
//
//  Contributors:
//      Kona Blend, kona8lend@@gmail.com
//
///////////////////////////////////////////////////////////////////////////////

#ifndef MP4V2_PLATFORM_TIME_TIME_H
#define MP4V2_PLATFORM_TIME_TIME_H

/// @namespace mp4v2::platform::time (private) Time.
/// <b>WARNING: THIS IS A PRIVATE NAMESPACE. NOT FOR PUBLIC CONSUMPTION.</b>
namespace mp4v2 { namespace platform { namespace time {

//! type used to represent milliseconds
typedef int64_t milliseconds_t;

//! type used to represent seconds
typedef int64_t seconds_t;

///////////////////////////////////////////////////////////////////////////////
//!
//! Get local-time in milliseconds.
//!
//! getLocalTimeMilliseconds obtains the system's notion of current Greenwich
//! time, adjusted according to the current timezone of the host system.
//! The time is expressed as an absolute value since midnight (0 hour),
//! January 1, 1970. This is commonly referred to as the "epoch".
//!
//! @return local-time in milliseconds elapsed since the epoch.
//!
///////////////////////////////////////////////////////////////////////////////
MP4V2_EXPORT milliseconds_t getLocalTimeMilliseconds();

///////////////////////////////////////////////////////////////////////////////
//!
//! Get local-time in seconds.
//!
//! getLocalTimeMilliseconds obtains the system's notion of current Greenwich
//! time, adjusted according to the current timezone of the host system.
//! The time is expressed as an absolute value since midnight (0 hour),
//! January 1, 1970. This is commonly referred to as the "epoch".
//!
//! @return local-time in seconds elapsed since the epoch.
//!
///////////////////////////////////////////////////////////////////////////////
MP4V2_EXPORT seconds_t getLocalTimeSeconds();

///////////////////////////////////////////////////////////////////////////////
//! @}
///////////////////////////////////////////////////////////////////////////////

}}} // namespace mp4v2::platform::time

#endif // MP4V2_PLATFORM_TIME_TIME_H
