chxavtimevalue.h

来自「著名的 helix realplayer 基于手机 symbian 系统的 播放」· C头文件 代码 · 共 197 行

H
197
字号
/*============================================================================*
 *
 * (c) 1995-2002 RealNetworks, Inc. Patents pending. All rights reserved.
 *
 *============================================================================*/
 
#ifndef UT_TIME_VALUE_H
#define UT_TIME_VALUE_H

/*
 *  CHXAvTimeValue:  Wrapper class for system time.
 *
 *
 * This wrapper for time was lifted for the most part from
 * the ACE Networking Package.
 */
#include <sys/time.h>
#include <e32std.h>





class CHXAvTimeValue {
public:
    CHXAvTimeValue(long sec = 0, long usec = 0);
    CHXAvTimeValue(const CHXAvTimeValue&);
    CHXAvTimeValue& operator=(const CHXAvTimeValue&);

    long sec() const;
    long usec() const;

    CHXAvTimeValue& operator+=(const CHXAvTimeValue&);
    CHXAvTimeValue& operator-=(const CHXAvTimeValue&);

    CHXAvTimeValue operator+(const CHXAvTimeValue&)const;
    CHXAvTimeValue operator-(const CHXAvTimeValue&)const;

    int operator<(const CHXAvTimeValue&) const;
    int operator>(const CHXAvTimeValue&) const;
    int operator<=(const CHXAvTimeValue&) const;
    int operator>=(const CHXAvTimeValue&) const;
    int operator==(const CHXAvTimeValue&) const;
    int operator!=(const CHXAvTimeValue&) const;

				// get current time
    static int now(CHXAvTimeValue&);

    CHXAvTimeValue zero() const { return CHXAvTimeValue(0, 0); } // zero constant.

private:
    void normalize();
    static bool GetTimeofDay(long& sec, long& usec);

    long sec_;
    long usec_;
};

inline
TTime UnixStart()
{
    return TDateTime(1970, EJanuary, 0, 00, 0, 0, 0);
}

inline
bool CHXAvTimeValue::GetTimeofDay(long& sec, long& usec)
{
    TTime utc;
    utc.UniversalTime();
    
    TInt64 unixTime = utc.Int64()  - UnixStart().Int64();
    sec = (unixTime/1000000).GetTInt();
    usec = (unixTime%1000000).GetTInt();

    return true;
}



inline
CHXAvTimeValue::CHXAvTimeValue(long sec, long usec)
    : sec_(sec), usec_(usec)
{
    normalize();
}
  
inline
CHXAvTimeValue::CHXAvTimeValue(const CHXAvTimeValue& tv)
    : sec_(tv.sec_), usec_(tv.usec_)
{}

inline
CHXAvTimeValue& CHXAvTimeValue::operator=(const CHXAvTimeValue& tv)
{
    if (this != &tv)  {
	sec_ = tv.sec_;
	usec_ = tv.usec_;
    }
    return *this;
}

inline
CHXAvTimeValue& CHXAvTimeValue::operator+=(const CHXAvTimeValue& tv)
{
    sec_ += tv.sec_;
    usec_ += tv.usec_;
    normalize();
    return *this;
}

inline
CHXAvTimeValue& CHXAvTimeValue::operator-=(const CHXAvTimeValue& tv)
{
    sec_ -= tv.sec_;
    usec_ -= tv.usec_;
    normalize();
    return *this;
}

inline
long CHXAvTimeValue::sec() const
{
    return sec_;
}

inline
long CHXAvTimeValue::usec() const
{
    return usec_;
}

inline
CHXAvTimeValue CHXAvTimeValue::operator+(const CHXAvTimeValue& tv) const
{
    CHXAvTimeValue sum(*this);
    return sum += tv;
}

inline
CHXAvTimeValue CHXAvTimeValue::operator-(const CHXAvTimeValue& tv) const
{
    CHXAvTimeValue delta(*this);
    return delta -= tv;
}

inline
int CHXAvTimeValue::operator<(const CHXAvTimeValue& tv) const
{
    return sec_ < tv.sec_ || (sec_ == tv.sec_ && usec_ < tv.usec_);
}

inline
int CHXAvTimeValue::operator>(const CHXAvTimeValue& tv) const
{
    return sec_ > tv.sec_ || (sec_ == tv.sec_ &&  usec_ > tv.usec_);
}

inline
int CHXAvTimeValue::operator<=(const CHXAvTimeValue& tv) const
{
    return sec_ < tv.sec_ || (sec_ == tv.sec_ &&  usec_ <= tv.usec_);
}

inline
int CHXAvTimeValue::operator>=(const CHXAvTimeValue& tv) const
{
    return sec_ > tv.sec_ || (sec_ == tv.sec_ && usec_ >= tv.usec_);
}

inline
int CHXAvTimeValue::operator==(const CHXAvTimeValue& tv) const
{
    return sec_ == tv.sec_ &&  usec_ == tv.usec_;
}

inline
int CHXAvTimeValue::operator!=(const CHXAvTimeValue& tv) const
{
    return sec_ != tv.sec_ ||  usec_ != tv.usec_;
}

// CHXAvTimeValue::now:
//   Get current time

inline
int CHXAvTimeValue::now(CHXAvTimeValue& tv)
{
    int ok = 0;
 
    if ((ok = (GetTimeofDay(tv.sec_, tv.usec_))))
	tv.normalize();
    return ok;
}


#endif // UT_STREAM_VALUE_H

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?