﻿require_once("unisharp\KeyValuePair.php");
require_once("unisharp\MyList.php");

class Dictionary 
{
    public function __construct($ini = NULL) {
        $this->entries = new MyList();
        $this->keys = new MyList();
        $this->values = new MyList();
        if($ini instanceof Dictionary) {
            foreach ($ini->entries->items as $kp) 
                $this->Put($kp->key, $kp->value);
        }
    }   
    
    private $entries;
    private $keys;
    private $values;
    
    public function Count() {
        return $this->keys->count;
    }
    public function Clear() {
        $this->entries->CLear();
        $this->keys->Clear();
        $this->values->Clear();
    }
    public function GetEntries() {
        return $this->entries;
    }
    public function GetKeys() {
        return $this->keys;
    }
    public function GetValues() {
        return $this->values;
    }
    
    public function Get($key) {
        $i = $this->keys->IndexOf($key);
        if($i < 0) return -1;
        return $this->values->items[$i];
    }
    public function Put($key, $val) {
        $i = $this->keys->IndexOf($key);
        if($i < 0) {
            $this->keys->Add($key);
            $this->values->Add($val);
            $this->entries->Add(new KeyValuePair($key, $val));
        }
        else {
            $this->values->items[$i] = $val;
            $this->entries->items[$i]->value = $val;
        }
        return $val;
    }
    public function Remove($key) {
        $i = $this->keys->IndexOf($key);
        if($i < 0) return;
        $this->keys->RemoveAt($i);
        $this->values->RemoveAt($i);
        $this->entries->RemoveAt($i);
    }
    public function ContainsKey($key) {
        return $this->keys->Contains($key);
    }
    public function ContainsValue($val) {
        return $this->values->Contains($val);
    }
    public function TryGetValue($key, &$val) {
        $i = $this->keys->IndexOf($key);
        if($i < 0) return false;
        $val = $this->values->items[$i];
        return true;
    }
        
}
