<?php
   require_once(V3_ROOT . '/etc/v3_config.inc');

##
#   v3_sort; Abstract class for decorate/sort/undecorate sorts.
#            Extending classes supply their own {un}decorate
#            and compare methods.
##
   abstract class v3_sort
   {
      abstract public function   decorate(&$item);
      abstract public function undecorate(&$item);
      abstract public function compare($item_a, $item_b);

      public function sort(&$array)
      {
         if(($num_entries = count($array)) === 0)
            return true;

         foreach($array as &$item)
            $this->decorate($item);

         if(usort($array, array($this, 'compare')) === false)
            return false;

         foreach($array as &$item)
            $this->undecorate($item);

         return true;
      }
   }
?>