EnumDescriptor.php 2.53 KB
Newer Older
1 2 3 4
<?php

namespace Google\Protobuf\Internal;

5 6
use Google\Protobuf\EnumValueDescriptor;

7 8
class EnumDescriptor
{
9
    use HasPublicDescriptorTrait;
10 11

    private $klass;
12
    private $legacy_klass;
13 14
    private $full_name;
    private $value;
15
    private $name_to_value;
16 17 18 19 20 21
    private $value_descriptor = [];

    public function __construct()
    {
        $this->public_desc = new \Google\Protobuf\EnumDescriptor($this);
    }
22 23 24 25 26 27 28 29 30 31 32 33 34 35

    public function setFullName($full_name)
    {
        $this->full_name = $full_name;
    }

    public function getFullName()
    {
        return $this->full_name;
    }

    public function addValue($number, $value)
    {
        $this->value[$number] = $value;
36
        $this->name_to_value[$value->getName()] = $value;
37
        $this->value_descriptor[] = new EnumValueDescriptor($value->getName(), $number);
38 39 40 41
    }

    public function getValueByNumber($number)
    {
42 43 44 45
        if (isset($this->value[$number])) {
            return $this->value[$number];
        }
        return null;
46 47 48 49
    }

    public function getValueByName($name)
    {
50 51 52 53
        if (isset($this->name_to_value[$name])) {
            return $this->name_to_value[$name];
        }
        return null;
54 55
    }

56 57
    public function getValueDescriptorByIndex($index)
    {
58 59 60 61
        if (isset($this->value_descriptor[$index])) {
            return $this->value_descriptor[$index];
        }
        return null;
62 63 64 65 66 67 68
    }

    public function getValueCount()
    {
        return count($this->value);
    }

69 70 71 72 73 74 75 76 77 78
    public function setClass($klass)
    {
        $this->klass = $klass;
    }

    public function getClass()
    {
        return $this->klass;
    }

79 80 81 82 83 84 85 86 87 88
    public function setLegacyClass($klass)
    {
        $this->legacy_klass = $klass;
    }

    public function getLegacyClass()
    {
        return $this->legacy_klass;
    }

89 90 91 92 93 94
    public static function buildFromProto($proto, $file_proto, $containing)
    {
        $desc = new EnumDescriptor();

        $enum_name_without_package  = "";
        $classname = "";
95
        $legacy_classname = "";
96 97 98 99 100 101 102
        $fullname = "";
        GPBUtil::getFullClassName(
            $proto,
            $containing,
            $file_proto,
            $enum_name_without_package,
            $classname,
103
            $legacy_classname,
104 105 106
            $fullname);
        $desc->setFullName($fullname);
        $desc->setClass($classname);
107
        $desc->setLegacyClass($legacy_classname);
108 109 110 111
        $values = $proto->getValue();
        foreach ($values as $value) {
            $desc->addValue($value->getNumber(), $value);
        }
112 113 114 115

        return $desc;
    }
}