<?php

/* class: debug_time
   $fmask-bits
      $fmask-bit0: start()
      $fmask-bit1: stop()
      $fmask-bit2: printlast()
      $fmask-bit3: printall()
      $fmask-bit4: 0->echo print 1->return only
   $fmask sample
      1: start
      2: stop
      3: restart
      
*/

class debug_time
{
   private 
$timestamp;
   private 
$count;
   private 
$last;
   private 
$sum;

   private function 
_start()
   {
      
$this->timestamp microtime(true);
   }
   private function 
_stop()
   {
      
$time microtime(true);
      
$this->last $time $this->timestamp;
      
$this->sum += $this->last;
      
$this->count++;
      return 
$this->last;
   }
   private function 
_restart()
   {
      
$time microtime(true);
      
$this->last $time $this->timestamp;
      
$this->sum += $this->last;
      
$this->count++;
      
$this->timestamp $time;
      return 
$this->last;
   }

   public function 
__construct()
   {
      
$this->timestamp =  microtime(true);
      
$this->sum 0;
      
$this->count 0;
   }

   public static function 
manage($name,$fmask)
   {
      static 
$list = array();
      
$printed "";
      if (!isset(
$list[$name]))
         
$list[$name] = new debug_time();
      else
      {
         switch(
$fmask 0x03)
         {
            case 
3:
              
$list[$name]->_restart();
              break;
            case 
2:
              
$list[$name]->_stop();
              break;
            case 
1:
              
$list[$name]->_start();
              break;
         }
      }
      switch(
$fmask 0x0C)
      {
        case 
0x0C:
           
$printed "Last run of '" $name "' took " floor($list[$name]->last 1000) . "ms." .
                      (
$list[$name]->count 
                          
" the avereage of the " $list[$name]->count " runs is: " floor(1000 $list[$name]->sum $list[$name]->count) . "ms" 
                          
"") . 
                      
"\n";
           break;
        case 
8:
           if (
$list[$name]->count)
              
$printed "The avereage of the " $list[$name]->count " runs is: " floor(1000 $list[$name]->sum $list[$name]->count) . "ms\n";
           break;
        case 
4:
           
$printed "Last run of '" $name "' took " floor($list[$name]->last 1000) . "ms.\n";
           break;
      }
      if (
$fmask 0x0C)
      {
         if((
$fmask 0x10) == 0)
            echo 
$printed;
         
//return $printed;
      
}
      
//else
         //return "";
      
return $printed;
   }
   public static function 
start($name)
   {   
debug_time::manage($name,1);   }
   public static function 
stop($name,$print=1)
   {
      
$mode + ($print << 2);
      return 
debug_time::manage($name,$mode);
   }
   public static function 
restart($name,$print=1)
   {
      
$mode + ($print << 2);
      return 
debug_time::manage($name,$mode);
   }
   public static function 
printit($name,$print=3)
   {
      
$mode + ($print << 2);
      return 
debug_time::manage($name,$mode);
   }
   public static function 
to_string($name,$print=3)
   {
      
$mode 0x10 + ($print << 2);
      return 
debug_time::manage($name,$mode);
   }
}