Subversion Repositories shark

Rev

Blame | Last modification | View Log | RSS feed

/*----------------------------------------------------------------------------
 *-------------------------      M a R T E   O S      ------------------------
 *----------------------------------------------------------------------------
 *                                                           V1.0  Dec 2001
 *
 *                    't i m e s p e c _ o p e r a t i o n s'
 *
 *                                      H
 *
 * File 'timespec_operations.h'                                        by MAR.
 *                                (july 2002)  transformed into macros by Jul.
 * Some basic operations with the type 'timespec'.
 *
 * ----------------------------------------------------------------------
 *  Copyright (C) 2001   Universidad de Cantabria, SPAIN
 *
 *  Authors: Mario Aldea Rivas          aldeam@ctr.unican.es
 *           Michael Gonzalez Harbour      mgh@ctr.unican.es
 *
 * MaRTE OS  is free software; you can  redistribute it and/or  modify it
 * under the terms of the GNU General Public License  as published by the
 * Free Software Foundation;  either  version 2, or (at  your option) any
 * later version.
 *
 * MaRTE OS  is distributed  in the  hope  that  it will be   useful, but
 * WITHOUT  ANY  WARRANTY;     without  even the   implied   warranty  of
 * MERCHANTABILITY  or  FITNESS FOR A  PARTICULAR PURPOSE.    See the GNU
 * General Public License for more details.
 *
 * You should have received  a  copy of  the  GNU General Public  License
 * distributed with MaRTE  OS;  see file COPYING.   If not,  write to the
 * Free Software  Foundation,  59 Temple Place  -  Suite 330,  Boston, MA
 * 02111-1307, USA.
 *
 * As a  special exception, if you  link this  unit  with other  files to
 * produce an   executable,   this unit  does  not  by  itself cause  the
 * resulting executable to be covered by the  GNU General Public License.
 * This exception does  not however invalidate  any other reasons why the
 * executable file might be covered by the GNU Public License.
 *
 *---------------------------------------------------------------------------*/


#ifndef _MARTE_MISC_TIMESPEC_OPERATIONS_H_
#define _MARTE_MISC_TIMESPEC_OPERATIONS_H_

#include <time.h>

#define smaller_timespec(t1, t2) \
 ( \
  (t1)->tv_sec < (t2)->tv_sec || ((t1)->tv_sec == (t2)->tv_sec &&   \
                                     (t1)->tv_nsec < (t2)->tv_nsec) \
 )


#define smaller_or_equal_timespec(t1, t2) \
 ( \
  (t1)->tv_sec < (t2)->tv_sec || ((t1)->tv_sec == (t2)->tv_sec &&    \
                                     (t1)->tv_nsec <= (t2)->tv_nsec) \
 )


#define incr_timespec(t1, t2) \
{ \
  (t1)->tv_sec += (t2)->tv_sec; \
  (t1)->tv_nsec += (t2)->tv_nsec; \
  if ((t1)->tv_nsec >= 1000000000) { \
    (t1)->tv_sec ++; \
    (t1)->tv_nsec -= 1000000000; \
  } \
}


#define decr_timespec(t1, t2) \
{ \
  if ((t1)->tv_nsec < (t2)->tv_nsec) { \
    (t1)->tv_sec -= (t2)->tv_sec + 1; \
    (t1)->tv_nsec = (t1)->tv_nsec + 1000000000 - (t2)->tv_nsec; \
  } else { \
    (t1)->tv_sec -= (t2)->tv_sec; \
    (t1)->tv_nsec -= (t2)->tv_nsec; \
  } \
}



#define  add_timespec( sum , t1 , t2 ) \
{ \
  (sum)->tv_sec  = (t1)->tv_sec  + (t2)->tv_sec; \
  (sum)->tv_nsec = (t1)->tv_nsec + (t2)->tv_nsec; \
  if ((sum)->tv_nsec >= 1000000000) { \
    (sum)->tv_sec ++; \
    (sum)->tv_nsec -= 1000000000; \
  } \
}


#define float_to_timespec( f1 , t1 ) \
( \
  (t1)->tv_sec = (int)(f1), \
  (t1)->tv_nsec = (int)(((f1)-(float)((t1)->tv_sec))*1000000000.0), \
  (t1) \
)


#define float_to_timespec_value(f1, t1) \
( \
  (t1).tv_sec = (int)(f1), \
  (t1).tv_nsec = (int)(((f1)-(float)((t1).tv_sec))*1000000000.0), \
  (t1) \
)


#endif /* _MARTE_MISC_TIMESPEC_OPERATIONS_H_ */