1 /*
   2     libparted - a library for manipulating disk partitions
   3     Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
   4 
   5     This program is free software; you can redistribute it and/or modify
   6     it under the terms of the GNU General Public License as published by
   7     the Free Software Foundation; either version 3 of the License, or
   8     (at your option) any later version.
   9 
  10     This program is distributed in the hope that it will be useful,
  11     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13     GNU General Public License for more details.
  14 
  15     You should have received a copy of the GNU General Public License
  16     along with this program.  If not, see <http://www.gnu.org/licenses/>.
  17 */
  18 
  19 /**
  20  * \addtogroup PedTimer
  21  * @{
  22  */
  23 
  24 /** \file timer.h */
  25 
  26 #ifndef PED_TIMER_H_INCLUDED
  27 #define PED_TIMER_H_INCLUDED
  28 
  29 #include <time.h>
  30 
  31 typedef struct _PedTimer PedTimer;
  32 
  33 typedef void PedTimerHandler (PedTimer* timer, void* context);
  34 
  35 /*
  36  * Structure keeping track of progress and time
  37  */
  38 struct _PedTimer {
  39         float                   frac;           /**< fraction of operation done */
  40         time_t                  start;          /**< time of start of op */
  41         time_t                  now;            /**< time of last update (now!) */
  42         time_t                  predicted_end;  /**< expected finish time */
  43         const char*             state_name;     /**< eg: "copying data" */
  44         PedTimerHandler*        handler;        /**< who to notify on updates */
  45         void*                   context;        /**< context to pass to handler */
  46 };
  47 
  48 extern PedTimer* ped_timer_new (PedTimerHandler* handler, void* context);
  49 extern void ped_timer_destroy (PedTimer* timer);
  50 
  51 /* a nested timer automatically notifies it's parent.  You should only
  52  * create one when you are going to use it (not before)
  53  */
  54 extern PedTimer* ped_timer_new_nested (PedTimer* parent, float nest_frac);
  55 extern void ped_timer_destroy_nested (PedTimer* timer);
  56 
  57 extern void ped_timer_touch (PedTimer* timer);
  58 extern void ped_timer_reset (PedTimer* timer);
  59 extern void ped_timer_update (PedTimer* timer, float new_frac);
  60 extern void ped_timer_set_state_name (PedTimer* timer, const char* state_name);
  61 
  62 #endif /* PED_TIMER_H_INCLUDED */
  63 
  64 
  65 /** @} */