/**
  * {@inheritdoc}
  */
 public function encodeObject($value, $flags = null)
 {
     $hash = $this->hash($value);
     if (!array_key_exists($hash, $this->values)) {
         if (Flags::contains(Flags::BUILD_STACK, $flags)) {
             $flags = Flags::remove(Flags::BUILD_STACK, $flags);
             $flags = Flags::add(Flags::CLOSE_STATEMENT, $flags);
             $this->buildStack($value, $flags);
         }
         $this->values[$hash] = null;
         $this->values[$hash] = $this->chain->next($this, __FUNCTION__, [$value, $flags]);
     }
     return $this->values[$hash];
 }
 /**
  * Check if given array is an numeric one.
  *
  * @param array    $data  The array being encoded.
  * @param int|null $flags Optional json encode flags.
  *
  * @return bool
  */
 private function isNumericArray(array $data, $flags)
 {
     if (Flags::contains(JSON_FORCE_OBJECT, $flags)) {
         return false;
     }
     foreach (array_keys($data) as $key) {
         if (!is_numeric($key)) {
             return false;
         }
     }
     return true;
 }