public static SBase DowncastSBase(IntPtr cPtr, bool owner)
{
if (cPtr.Equals(IntPtr.Zero)) return null;
SBase sb = new SBase(cPtr, false);
string pkgName = sb.getPackageName();
if (pkgName == "core")
{
switch( sb.getTypeCode() )
{
case (int) libsbml.SBML_COMPARTMENT:
return new Compartment(cPtr, owner);
case (int) libsbml.SBML_COMPARTMENT_TYPE:
return new CompartmentType(cPtr, owner);
case (int) libsbml.SBML_CONSTRAINT:
return new Constraint(cPtr, owner);
case (int) libsbml.SBML_DOCUMENT:
return new SBMLDocument(cPtr, owner);
case (int) libsbml.SBML_DELAY:
return new Delay(cPtr, owner);
case (int) libsbml.SBML_EVENT:
return new Event(cPtr, owner);
case (int) libsbml.SBML_EVENT_ASSIGNMENT:
return new EventAssignment(cPtr, owner);
case (int) libsbml.SBML_FUNCTION_DEFINITION:
return new FunctionDefinition(cPtr, owner);
case (int) libsbml.SBML_INITIAL_ASSIGNMENT:
return new InitialAssignment(cPtr, owner);
case (int) libsbml.SBML_KINETIC_LAW:
return new KineticLaw(cPtr, owner);
case (int) libsbml.SBML_LIST_OF:
string name = sb.getElementName();
if(name == "listOf")
{
return new ListOf(cPtr, owner);
}
else if(name == "listOfCompartments")
{
return new ListOfCompartments(cPtr, owner);
}
else if(name == "listOfCompartmentTypes")
{
return new ListOfCompartmentTypes(cPtr, owner);
}
else if(name == "listOfConstraints")
{
return new ListOfConstraints(cPtr, owner);
}
else if(name == "listOfEvents")
{
return new ListOfEvents(cPtr, owner);
}
else if(name == "listOfEventAssignments")
{
return new ListOfEventAssignments(cPtr, owner);
}
else if(name == "listOfFunctionDefinitions")
{
return new ListOfFunctionDefinitions(cPtr, owner);
}
else if(name == "listOfInitialAssignments")
{
return new ListOfInitialAssignments(cPtr, owner);
}
else if(name == "listOfParameters")
{
return new ListOfParameters(cPtr, owner);
}
else if(name == "listOfLocalParameters")
{
return new ListOfLocalParameters(cPtr, owner);
}
else if(name == "listOfReactions")
{
return new ListOfReactions(cPtr, owner);
}
else if(name == "listOfRules")
{
return new ListOfRules(cPtr, owner);
}
else if(name == "listOfSpecies")
{
return new ListOfSpecies(cPtr, owner);
}
else if(name == "listOfUnknowns")
{
return new ListOfSpeciesReferences(cPtr, owner);
}
else if(name == "listOfReactants")
{
return new ListOfSpeciesReferences(cPtr, owner);
}
else if(name == "listOfProducts")
{
return new ListOfSpeciesReferences(cPtr, owner);
}
else if(name == "listOfModifiers")
{
return new ListOfSpeciesReferences(cPtr, owner);
}
else if(name == "listOfSpeciesTypes")
{
return new ListOfSpeciesTypes(cPtr, owner);
}
else if(name == "listOfUnits")
{
return new ListOfUnits(cPtr, owner);
}
else if(name == "listOfUnitDefinitions")
{
return new ListOfUnitDefinitions(cPtr, owner);
}
return new ListOf(cPtr, owner);
case (int) libsbml.SBML_MODEL:
return new Model(cPtr, owner);
case (int) libsbml.SBML_PARAMETER:
return new Parameter(cPtr, owner);
case (int) libsbml.SBML_PRIORITY:
return new Priority(cPtr, owner);
case (int) libsbml.SBML_LOCAL_PARAMETER:
return new LocalParameter(cPtr, owner);
case (int) libsbml.SBML_REACTION:
return new Reaction(cPtr, owner);
case (int) libsbml.SBML_SPECIES:
return new Species(cPtr, owner);
case (int) libsbml.SBML_SPECIES_REFERENCE:
return new SpeciesReference(cPtr, owner);
case (int) libsbml.SBML_MODIFIER_SPECIES_REFERENCE:
return new ModifierSpeciesReference(cPtr, owner);
case (int) libsbml.SBML_SPECIES_TYPE:
return new SpeciesType(cPtr, owner);
case (int) libsbml.SBML_TRIGGER:
return new Trigger(cPtr, owner);
case (int) libsbml.SBML_UNIT_DEFINITION:
return new UnitDefinition(cPtr, owner);
case (int) libsbml.SBML_UNIT:
return new Unit(cPtr, owner);
case (int) libsbml.SBML_ALGEBRAIC_RULE:
return new AlgebraicRule(cPtr, owner);
case (int) libsbml.SBML_ASSIGNMENT_RULE:
return new AssignmentRule(cPtr, owner);
case (int) libsbml.SBML_RATE_RULE:
return new RateRule(cPtr, owner);
case (int) libsbml.SBML_STOICHIOMETRY_MATH:
return new StoichiometryMath(cPtr, owner);
default:
return new SBase(cPtr, owner);
}
}
else
{
SBMLExtension sbmlext = SBMLExtensionRegistry.getInstance().getExtension(pkgName);
if (sbmlext != null)
{
return sbmlext.DowncastSBase(cPtr,owner);
}
}
return new SBase(cPtr, owner);
}