/// <summary>
    /// The function actually doing the transforming. This function is called
    /// once for each SBase element in the model.
    /// </summary>
    /// <param name="element">the current element</param>
    /// <returns>status code</returns>
    public override int transform(SBase element)
    {
        // return in case we don't have a valid element
        if (element == null || element.getTypeCode() == libsbml.SBML_LOCAL_PARAMETER)
        {
            return(libsbml.LIBSBML_OPERATION_SUCCESS);
        }

        // or if there is nothing to do
        if (!element.isSetName() || element.getId() == element.getName())
        {
            return(libsbml.LIBSBML_OPERATION_SUCCESS);
        }

        // find the new id
        string newId = getValidIdForName(element.getName());

        // set it
        element.setId(newId);

        // remember it
        existingIds.Add(newId);

        return(libsbml.LIBSBML_OPERATION_SUCCESS);
    }