/**
  * Add the evolution to the decodedTaf's entity
  *
  * @param DecodedTaf    $decoded_taf
  * @param Evolution     $evolution
  * @param array         $result
  * @param string        $entity_name
  */
 private function addEvolution($decoded_taf, $evolution, $result, $entity_name)
 {
     // clone the evolution entity
     /** @var Evolution $newEvolution */
     $new_evolution = clone $evolution;
     // add the new entity to it
     $new_evolution->setEntity($result[$entity_name]);
     // possibly add cavok to it
     if ($entity_name == 'visibility' && $this->with_cavok == true) {
         $new_evolution->setCavok(true);
     }
     // get the original entity from the decoded taf or a new one decoded taf doesn't contain it yet
     $getter_name = 'get' . ucfirst($entity_name);
     $setter_name = 'set' . ucfirst($entity_name);
     $decoded_entity = $decoded_taf->{$getter_name}();
     if ($decoded_entity == null || $entity_name == 'clouds') {
         // that entity is not in the decoded_taf yet, or it's a cloud layer which is a special case
         $decoded_entity = $this->instantiateEntity($entity_name);
     }
     // add the new evolution to that entity
     $decoded_entity->addEvolution($new_evolution);
     // update the decoded taf's entity or add the new one to it
     if ($entity_name == 'clouds') {
         $decoded_taf->addCloud($decoded_entity);
     } else {
         $decoded_taf->{$setter_name}($decoded_entity);
     }
 }