CollectionMap::__construct()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 6
Bugs 2 Features 2
Metric Value
c 6
b 2
f 2
dl 0
loc 10
rs 9.4286
cc 3
eloc 7
nc 3
nop 2
1
<?php
2
namespace Cassandra\Type;
3
4
class CollectionMap extends Base{
5
    
6
    /**
7
     * @param array $value
8
     * @param array $definition
9
     * @throws Exception
10
     */
11
    public function __construct($value, array $definition) {
12
        $this->_definition = $definition;
13
        if ($value === null)
14
            return;
15
    
16
        if (!is_array($value))
17
            throw new Exception('Incoming value must be type of array.');
18
        
19
        $this->_value = $value;
20
    }
21
    
22
    /**
23
     * 
24
     * @param array $value
25
     * @param array $definition [$keyType, $valueType]
26
     * @return string
27
     */
28
    public static function binary($value, array $definition){
29
        list($keyType, $valueType) = $definition;
30
        $binary = pack('N', count($value));
31
        foreach($value as $key => $val) {
32
            $keyPacked = $key instanceof Base
33
                ? $key->getBinary()
34
                : Base::getBinaryByType($keyType, $key);
35
            
36
            $valuePacked = $val instanceof Base
37
                ? $val->getBinary()
38
                : Base::getBinaryByType($valueType, $val);
39
            
40
            $binary .= pack('N', strlen($keyPacked)) . $keyPacked;
41
            $binary .= pack('N', strlen($valuePacked)) . $valuePacked;
42
        }
43
        return $binary;
44
    }
45
    
46
    public static function parse($binary, array $definition){
47
        return (new \Cassandra\Response\StreamReader($binary))->readMap($definition);
48
    }
49
}
50