ESR_ReturnCode SR_NametagsDestroyImpl(SR_Nametags* self)
{
  SR_NametagsImpl* impl = (SR_NametagsImpl*) self;
  LCHAR number[MAX_UINT_DIGITS+1];
  ESR_ReturnCode rc;

  if (impl->value != NULL)
  {
    size_t size, i, len;
    HashMap* list = impl->value;
    SR_Nametag* nametag;

    CHKLOG(rc, list->getSize(list, &size));
    for (i = 0; i < size; ++i)
    {
      CHKLOG(rc, list->getValueAtIndex(list, 0, (void **)&nametag));
      CHKLOG(rc, list->removeAtIndex(list, 0));
      CHKLOG(rc, nametag->destroy(nametag));
    }

    len = MAX_UINT_DIGITS + 1;
    CHKLOG(rc, lultostr(size, (LCHAR*) &number, &len, 10));
    CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("removeCount"), number));
    CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsDestroy")));
    list->destroy(list);
    impl->value = NULL;
  }
  CHKLOG(rc, SR_EventLogTokenPointer_BASIC(impl->eventLog, impl->logLevel, L("pointer"), self));
  CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsDestroy")));
  impl->eventLog = NULL;
  FREE(self);
  return ESR_SUCCESS;
CLEANUP:
  return rc;
}