<?php
/**
 * IBSE
 *
 * Information Bot Service Engine
 *
 * @package        IBSE
 * @author        HSDN Team
 * @copyright    Copyright (c) 2006-2010, Information Networks Ltd.
 * @link        http://www.hsdn.org
 * @since        Version 4.0
 */

/**
 * IBAPI
 *
 * Information Bot Application Program Interface
 *
 * @package        IBSE
 * @author        HSDN Team
 * @copyright    Copyright (c) 2006-2010, Information Networks Ltd.
 * @since        Version 4.0
 */

// ------------------------------------------------------------------------

/**
 * Класс Table
 *
 * @author        HSDN Team
 */
class Table
{
    
/*
     * Массив таблицы
     *
     * @access    public
     */
    
public $t;

    
/*
     * Смещение индексов таблицы
     *
     * @access    private
     */
    
private $o;


    
/**
     * Конструктор
     *
     * @access    public
     * @param    array
     * @param    int
     * @return    void
     */
    
public function __construct($t$o 0)
    {
        
$this->$t;
        
$this->$o;

        
$this->rebuild();
    }

    
/**
     * Вставка элемента в таблицу
     *
     * @access    public
     * @param    mixed
     * @param    mixed
     * @return    mixed
     */
    
public function insert($v$p FALSE)
    {
        if (
$p === FALSE)
        {
            
$p = (int) $this->maxn() + 1;
        }

        
$t array_slice($this->t0$p 1);

        
array_push($t$v);

        
$this->array_merge($tarray_slice($this->t$p 1));

        
$this->rebuild();

        return 
$this->t[$p];
    }

    
/**
     * Удаление элемента из таблицы
     *
     * @access    public
     * @param    int
     * @return    mixed
     */
    
public function remove($p)
    {
        if (isset(
$this->t[$p]))
        {
            
$v $this->t[$p];

            unset(
$this->t[$p]);
            
$this->rebuild();

            return 
$v;
        }

        return 
FALSE;
    }

    
/**
     * Получение максимального индекса таблицы
     *
     * @access    public
     * @return    int
     */
    
public function maxn()
    {
        
$this->rebuild();

        
$k array_keys($this->t);
        
        
rsort($k);

        return (int) 
reset($k);
    }

    
/**
     * Перестройка массива таблицы
     *
     * @access    private
     * @return    void
     */
    
private function rebuild()
    {
        
$t = array();

        foreach (
array_values($this->t) as $k => $v)
        {
            
$t[$k $this->o] = $v;
        }

        
$this->$t;
    }
}

/* EOF Table.class.php */