Add php protobuffer support for transition to GTFS-realtime
[busui.git] / lib / Protobuf-PHP / library / DrSlump / Protobuf / Registry.php
blob:a/lib/Protobuf-PHP/library/DrSlump/Protobuf/Registry.php -> blob:b/lib/Protobuf-PHP/library/DrSlump/Protobuf/Registry.php
  <?php
   
  namespace DrSlump\Protobuf;
   
  use DrSlump\Protobuf;
   
  /**
  * Keeps instances of the different message descriptors used.
  *
  */
  class Registry
  {
  /** @var array */
  protected $descriptors = array();
   
  /**
  * @param string|\DrSlump\Protobuf\Message $message
  * @param \DrSlump\Protobuf\Descriptor $descriptor
  */
  public function setDescriptor($message, Descriptor $descriptor)
  {
  $message = is_object($message) ? get_class($message) : $message;
  $message = ltrim($message, '\\');
   
  $this->descriptors[$message] = $descriptor;
  }
   
  /**
  * Obtains the descriptor for the given message class, obtaining
  * it if not yet loaded.
  *
  * @param string|\DrSlump\Protobuf\Message $message
  * @return \DrSlump\Protobuf\Descriptor
  */
  public function getDescriptor($message)
  {
  $message = is_object($message) ? get_class($message) : $message;
  $message = ltrim($message, '\\');
   
  // Build a descriptor for the message
  if (!isset($this->descriptors[$message])) {
  $class = '\\' . $message;
  if (!class_exists($class)) {
  throw Protobuf\Exception('Message class "' . $class . '" not available');
  }
   
  $this->descriptors[$message] = $class::descriptor();
  }
   
  return $this->descriptors[$message];
  }
   
  /**
  * @param string|\DrSlump\Protobuf\Message $message
  * @return bool
  */
  public function hasDescriptor($message)
  {
  $message = is_object($message) ? get_class($message) : $message;
  $message = ltrim($message, '\\');
   
  return isset($this->descriptors[$message]);
  }
   
  /**
  * @param string|\DrSlump\Protobuf\Message $message
  */
  public function unsetDescriptor($message)
  {
  $message = is_object($message) ? get_class($message) : $message;
  $message = ltrim($message, '\\');
   
  unset($this->descriptors[$message]);
  }
  }