EnumDescriptor.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace Google\Protobuf\Internal;
  3. use Google\Protobuf\EnumValueDescriptor;
  4. class EnumDescriptor
  5. {
  6. use HasPublicDescriptorTrait;
  7. private $klass;
  8. private $legacy_klass;
  9. private $full_name;
  10. private $value;
  11. private $name_to_value;
  12. private $value_descriptor = [];
  13. public function __construct()
  14. {
  15. $this->public_desc = new \Google\Protobuf\EnumDescriptor($this);
  16. }
  17. public function setFullName($full_name)
  18. {
  19. $this->full_name = $full_name;
  20. }
  21. public function getFullName()
  22. {
  23. return $this->full_name;
  24. }
  25. public function addValue($number, $value)
  26. {
  27. $this->value[$number] = $value;
  28. $this->name_to_value[$value->getName()] = $value;
  29. $this->value_descriptor[] = new EnumValueDescriptor($value->getName(), $number);
  30. }
  31. public function getValueByNumber($number)
  32. {
  33. return $this->value[$number];
  34. }
  35. public function getValueByName($name)
  36. {
  37. return $this->name_to_value[$name];
  38. }
  39. public function getValueDescriptorByIndex($index)
  40. {
  41. return $this->value_descriptor[$index];
  42. }
  43. public function getValueCount()
  44. {
  45. return count($this->value);
  46. }
  47. public function setClass($klass)
  48. {
  49. $this->klass = $klass;
  50. }
  51. public function getClass()
  52. {
  53. return $this->klass;
  54. }
  55. public function setLegacyClass($klass)
  56. {
  57. $this->legacy_klass = $klass;
  58. }
  59. public function getLegacyClass()
  60. {
  61. return $this->legacy_klass;
  62. }
  63. public static function buildFromProto($proto, $file_proto, $containing)
  64. {
  65. $desc = new EnumDescriptor();
  66. $enum_name_without_package = "";
  67. $classname = "";
  68. $legacy_classname = "";
  69. $fullname = "";
  70. GPBUtil::getFullClassName(
  71. $proto,
  72. $containing,
  73. $file_proto,
  74. $enum_name_without_package,
  75. $classname,
  76. $legacy_classname,
  77. $fullname);
  78. $desc->setFullName($fullname);
  79. $desc->setClass($classname);
  80. $desc->setLegacyClass($legacy_classname);
  81. $values = $proto->getValue();
  82. foreach ($values as $value) {
  83. $desc->addValue($value->getNumber(), $value);
  84. }
  85. return $desc;
  86. }
  87. }