| Current Path : /var/www/iplanru/data/www/www.i-plan.ru/libraries/phpmorphy/utils/dict_stuff/dict/writer/ | 
| Current File : /var/www/iplanru/data/www/www.i-plan.ru/libraries/phpmorphy/utils/dict_stuff/dict/writer/writer.php | 
<?php
require_once(dirname(__FILE__) . '/../source/source.php');
interface phpMorphy_Dict_Writer_Interface {
    function write(phpMorphy_Dict_Source_Interface $source);
}
interface phpMorphy_Dict_Writer_Observer_Interface {
    function onStart();
    function onLog($message);
    function onEnd();
}
class phpMorphy_Dict_Writer_Observer_Empty implements phpMorphy_Dict_Writer_Observer_Interface {
    function onStart() { }
    function onLog($message) { }
    function onEnd() { }
}
class phpMorphy_Dict_Writer_Observer_Standart implements phpMorphy_Dict_Writer_Observer_Interface {
    protected
        $start_time;
    function __construct($callback) {
        if(!is_callable($callback)) {
            throw new Exception("Invalid callback");
        }
        $this->callback = $callback;
    }
    function onStart() {
        $this->start_time = microtime(true);
    }
    function onEnd() {
        $this->writeMessage(sprintf("Total time = %f", microtime(true) - $this->start_time));
    }
    function onLog($message) {
        $this->writeMessage(sprintf("+%0.2f %s", microtime(true) - $this->start_time, $message));
    }
    protected function writeMessage($msg) {
        call_user_func($this->callback, $msg);
    }
}
abstract class phpMorphy_Dict_Writer_Base {
    private $observer;
    function __construct() {
        $this->setObserver(new phpMorphy_Dict_Writer_Observer_Empty());
    }
    function setObserver(phpMorphy_Dict_Writer_Observer_Interface $observer) {
        $this->observer = $observer;
    }
    function hasObserver() {
        return isset($this->observer);
    }
    function getObserver() {
        return $this->observer;
    }
    protected function log($message) {
        if($this->hasObserver()) {
            $this->getObserver()->onLog($message);
        }
    }
}