attributes[$attribute->getId()] = $attribute; } /** * @param string $id * * @return Attribute|null */ public function getAttribute(string $id) : ?Attribute{ return $this->attributes[$id] ?? null; } /** * @return Attribute[] */ public function getAll() : array{ return $this->attributes; } /** * @return Attribute[] */ public function needSend() : array{ return array_filter($this->attributes, function(Attribute $attribute){ return $attribute->isSyncable() and $attribute->isDesynchronized(); }); } public function offsetExists($offset) : bool{ return isset($this->attributes[$offset]); } /** * @param string $offset * * @return float */ public function offsetGet($offset) : float{ return $this->attributes[$offset]->getValue(); } /** * @param string $offset * @param float $value */ public function offsetSet($offset, $value) : void{ $this->attributes[$offset]->setValue($value); } public function offsetUnset($offset) : void{ throw new \RuntimeException("Could not unset an attribute from an attribute map"); } }