EnumDescriptor.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. if (isset($this->value[$number])) {
  34. return $this->value[$number];
  35. }
  36. return null;
  37. }
  38. public function getValueByName($name)
  39. {
  40. if (isset($this->name_to_value[$name])) {
  41. return $this->name_to_value[$name];
  42. }
  43. return null;
  44. }
  45. public function getValueDescriptorByIndex($index)
  46. {
  47. if (isset($this->value_descriptor[$index])) {
  48. return $this->value_descriptor[$index];
  49. }
  50. return null;
  51. }
  52. public function getValueCount()
  53. {
  54. return count($this->value);
  55. }
  56. public function setClass($klass)
  57. {
  58. $this->klass = $klass;
  59. }
  60. public function getClass()
  61. {
  62. return $this->klass;
  63. }
  64. public function setLegacyClass($klass)
  65. {
  66. $this->legacy_klass = $klass;
  67. }
  68. public function getLegacyClass()
  69. {
  70. return $this->legacy_klass;
  71. }
  72. public static function buildFromProto($proto, $file_proto, $containing)
  73. {
  74. $desc = new EnumDescriptor();
  75. $enum_name_without_package = "";
  76. $classname = "";
  77. $legacy_classname = "";
  78. $fullname = "";
  79. GPBUtil::getFullClassName(
  80. $proto,
  81. $containing,
  82. $file_proto,
  83. $enum_name_without_package,
  84. $classname,
  85. $legacy_classname,
  86. $fullname);
  87. $desc->setFullName($fullname);
  88. $desc->setClass($classname);
  89. $desc->setLegacyClass($legacy_classname);
  90. $values = $proto->getValue();
  91. foreach ($values as $value) {
  92. $desc->addValue($value->getNumber(), $value);
  93. }
  94. return $desc;
  95. }
  96. }