1ffe3c632Sopenharmony_ci<?php
2ffe3c632Sopenharmony_ci
3ffe3c632Sopenharmony_cinamespace Google\Protobuf\Internal;
4ffe3c632Sopenharmony_ci
5ffe3c632Sopenharmony_ciuse Google\Protobuf\EnumValueDescriptor;
6ffe3c632Sopenharmony_ci
7ffe3c632Sopenharmony_ciclass EnumDescriptor
8ffe3c632Sopenharmony_ci{
9ffe3c632Sopenharmony_ci    use HasPublicDescriptorTrait;
10ffe3c632Sopenharmony_ci
11ffe3c632Sopenharmony_ci    private $klass;
12ffe3c632Sopenharmony_ci    private $legacy_klass;
13ffe3c632Sopenharmony_ci    private $full_name;
14ffe3c632Sopenharmony_ci    private $value;
15ffe3c632Sopenharmony_ci    private $name_to_value;
16ffe3c632Sopenharmony_ci    private $value_descriptor = [];
17ffe3c632Sopenharmony_ci
18ffe3c632Sopenharmony_ci    public function __construct()
19ffe3c632Sopenharmony_ci    {
20ffe3c632Sopenharmony_ci        $this->public_desc = new \Google\Protobuf\EnumDescriptor($this);
21ffe3c632Sopenharmony_ci    }
22ffe3c632Sopenharmony_ci
23ffe3c632Sopenharmony_ci    public function setFullName($full_name)
24ffe3c632Sopenharmony_ci    {
25ffe3c632Sopenharmony_ci        $this->full_name = $full_name;
26ffe3c632Sopenharmony_ci    }
27ffe3c632Sopenharmony_ci
28ffe3c632Sopenharmony_ci    public function getFullName()
29ffe3c632Sopenharmony_ci    {
30ffe3c632Sopenharmony_ci        return $this->full_name;
31ffe3c632Sopenharmony_ci    }
32ffe3c632Sopenharmony_ci
33ffe3c632Sopenharmony_ci    public function addValue($number, $value)
34ffe3c632Sopenharmony_ci    {
35ffe3c632Sopenharmony_ci        $this->value[$number] = $value;
36ffe3c632Sopenharmony_ci        $this->name_to_value[$value->getName()] = $value;
37ffe3c632Sopenharmony_ci        $this->value_descriptor[] = new EnumValueDescriptor($value->getName(), $number);
38ffe3c632Sopenharmony_ci    }
39ffe3c632Sopenharmony_ci
40ffe3c632Sopenharmony_ci    public function getValueByNumber($number)
41ffe3c632Sopenharmony_ci    {
42ffe3c632Sopenharmony_ci        if (isset($this->value[$number])) {
43ffe3c632Sopenharmony_ci            return $this->value[$number];
44ffe3c632Sopenharmony_ci        }
45ffe3c632Sopenharmony_ci        return null;
46ffe3c632Sopenharmony_ci    }
47ffe3c632Sopenharmony_ci
48ffe3c632Sopenharmony_ci    public function getValueByName($name)
49ffe3c632Sopenharmony_ci    {
50ffe3c632Sopenharmony_ci        if (isset($this->name_to_value[$name])) {
51ffe3c632Sopenharmony_ci            return $this->name_to_value[$name];
52ffe3c632Sopenharmony_ci        }
53ffe3c632Sopenharmony_ci        return null;
54ffe3c632Sopenharmony_ci    }
55ffe3c632Sopenharmony_ci
56ffe3c632Sopenharmony_ci    public function getValueDescriptorByIndex($index)
57ffe3c632Sopenharmony_ci    {
58ffe3c632Sopenharmony_ci        if (isset($this->value_descriptor[$index])) {
59ffe3c632Sopenharmony_ci            return $this->value_descriptor[$index];
60ffe3c632Sopenharmony_ci        }
61ffe3c632Sopenharmony_ci        return null;
62ffe3c632Sopenharmony_ci    }
63ffe3c632Sopenharmony_ci
64ffe3c632Sopenharmony_ci    public function getValueCount()
65ffe3c632Sopenharmony_ci    {
66ffe3c632Sopenharmony_ci        return count($this->value);
67ffe3c632Sopenharmony_ci    }
68ffe3c632Sopenharmony_ci
69ffe3c632Sopenharmony_ci    public function setClass($klass)
70ffe3c632Sopenharmony_ci    {
71ffe3c632Sopenharmony_ci        $this->klass = $klass;
72ffe3c632Sopenharmony_ci    }
73ffe3c632Sopenharmony_ci
74ffe3c632Sopenharmony_ci    public function getClass()
75ffe3c632Sopenharmony_ci    {
76ffe3c632Sopenharmony_ci        return $this->klass;
77ffe3c632Sopenharmony_ci    }
78ffe3c632Sopenharmony_ci
79ffe3c632Sopenharmony_ci    public function setLegacyClass($klass)
80ffe3c632Sopenharmony_ci    {
81ffe3c632Sopenharmony_ci        $this->legacy_klass = $klass;
82ffe3c632Sopenharmony_ci    }
83ffe3c632Sopenharmony_ci
84ffe3c632Sopenharmony_ci    public function getLegacyClass()
85ffe3c632Sopenharmony_ci    {
86ffe3c632Sopenharmony_ci        return $this->legacy_klass;
87ffe3c632Sopenharmony_ci    }
88ffe3c632Sopenharmony_ci
89ffe3c632Sopenharmony_ci    public static function buildFromProto($proto, $file_proto, $containing)
90ffe3c632Sopenharmony_ci    {
91ffe3c632Sopenharmony_ci        $desc = new EnumDescriptor();
92ffe3c632Sopenharmony_ci
93ffe3c632Sopenharmony_ci        $enum_name_without_package  = "";
94ffe3c632Sopenharmony_ci        $classname = "";
95ffe3c632Sopenharmony_ci        $legacy_classname = "";
96ffe3c632Sopenharmony_ci        $fullname = "";
97ffe3c632Sopenharmony_ci        GPBUtil::getFullClassName(
98ffe3c632Sopenharmony_ci            $proto,
99ffe3c632Sopenharmony_ci            $containing,
100ffe3c632Sopenharmony_ci            $file_proto,
101ffe3c632Sopenharmony_ci            $enum_name_without_package,
102ffe3c632Sopenharmony_ci            $classname,
103ffe3c632Sopenharmony_ci            $legacy_classname,
104ffe3c632Sopenharmony_ci            $fullname);
105ffe3c632Sopenharmony_ci        $desc->setFullName($fullname);
106ffe3c632Sopenharmony_ci        $desc->setClass($classname);
107ffe3c632Sopenharmony_ci        $desc->setLegacyClass($legacy_classname);
108ffe3c632Sopenharmony_ci        $values = $proto->getValue();
109ffe3c632Sopenharmony_ci        foreach ($values as $value) {
110ffe3c632Sopenharmony_ci            $desc->addValue($value->getNumber(), $value);
111ffe3c632Sopenharmony_ci        }
112ffe3c632Sopenharmony_ci
113ffe3c632Sopenharmony_ci        return $desc;
114ffe3c632Sopenharmony_ci    }
115ffe3c632Sopenharmony_ci}
116