/** * \file local.i * \brief Java-specific SWIG directives for wrapping libSBML API * \author Ben Bornstein * * $Id: local.i 9762 2009-07-13 06:51:18Z ajouraku $ * $HeadURL: https://sbml.svn.sourceforge.net/svnroot/sbml/trunk/libsbml/src/bindings/java/local.i $ */ /* Copyright 2004 California Institute of Technology and Japan Science and * Technology Corporation. * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation. A copy of the license agreement is * provided in the file named "LICENSE.txt" included with this software * distribution. It is also available online at * http://sbml.org/software/libsbml/license.html * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ %include "javadoc.i" %include "std_string.i" /** * Renames *::clone() to *::cloneObject(). * In JDK 1.4.2, libsbml's *::clone() methods can't override * "Object Java.lang.Object.clone()" because JDK 1.4.2 doesn't * allow override with different return type. * * (2008-12-07) * Currently, JDK 1.5 or later, which allows a covariant return type, * is required for libSBML Java binding, and thus we don't have to use * this rename directive. However, this directive is still enabled for * compatiblity. */ %rename(cloneObject) *::clone; /** * Wraps covariant return types of ::clone functions. * * Currently, SWIG doesn't allow a covariant return type although * JDK 1.5 or later supports it. * Thus, the following directives are required to enable the * covariant return type. */ #pragma SWIG nowarn=822 %define COVARIANT_RTYPE_CLONE(_CNAME_) %typemap(jstype) _CNAME_* _CNAME_::clone "_CNAME_" %enddef COVARIANT_RTYPE_CLONE(Compartment) COVARIANT_RTYPE_CLONE(CompartmentType) COVARIANT_RTYPE_CLONE(Constraint) COVARIANT_RTYPE_CLONE(Delay) COVARIANT_RTYPE_CLONE(Event) COVARIANT_RTYPE_CLONE(EventAssignment) COVARIANT_RTYPE_CLONE(FunctionDefinition) COVARIANT_RTYPE_CLONE(InitialAssignment) COVARIANT_RTYPE_CLONE(KineticLaw) COVARIANT_RTYPE_CLONE(ListOf) COVARIANT_RTYPE_CLONE(Model) COVARIANT_RTYPE_CLONE(Parameter) COVARIANT_RTYPE_CLONE(Reaction) COVARIANT_RTYPE_CLONE(Rule) COVARIANT_RTYPE_CLONE(AlgebraicRule) COVARIANT_RTYPE_CLONE(AssignmentRule) COVARIANT_RTYPE_CLONE(RateRule) COVARIANT_RTYPE_CLONE(SBMLDocument) COVARIANT_RTYPE_CLONE(Species) COVARIANT_RTYPE_CLONE(SpeciesReference) COVARIANT_RTYPE_CLONE(SpeciesType) COVARIANT_RTYPE_CLONE(StoichiometryMath) COVARIANT_RTYPE_CLONE(Trigger) COVARIANT_RTYPE_CLONE(Unit) COVARIANT_RTYPE_CLONE(UnitDefinition) COVARIANT_RTYPE_CLONE(ListOf) COVARIANT_RTYPE_CLONE(ListOfCompartmentTypes) COVARIANT_RTYPE_CLONE(ListOfCompartments) COVARIANT_RTYPE_CLONE(ListOfConstraints) COVARIANT_RTYPE_CLONE(ListOfEventAssignments) COVARIANT_RTYPE_CLONE(ListOfEvents) COVARIANT_RTYPE_CLONE(ListOfFunctionDefinitions) COVARIANT_RTYPE_CLONE(ListOfInitialAssignments) COVARIANT_RTYPE_CLONE(ListOfParameters) COVARIANT_RTYPE_CLONE(ListOfReactions) COVARIANT_RTYPE_CLONE(ListOfRules) COVARIANT_RTYPE_CLONE(ListOfSpecies) COVARIANT_RTYPE_CLONE(ListOfSpeciesReferences) COVARIANT_RTYPE_CLONE(ListOfSpeciesTypes) COVARIANT_RTYPE_CLONE(ListOfUnitDefinitions) COVARIANT_RTYPE_CLONE(ListOfUnits) #ifdef USE_LAYOUT COVARIANT_RTYPE_CLONE(BoundingBox) COVARIANT_RTYPE_CLONE(CompartmentGlyph) COVARIANT_RTYPE_CLONE(CubicBezier) COVARIANT_RTYPE_CLONE(Curve) COVARIANT_RTYPE_CLONE(Dimensions) COVARIANT_RTYPE_CLONE(GraphicalObject) COVARIANT_RTYPE_CLONE(Layout) COVARIANT_RTYPE_CLONE(LineSegment) COVARIANT_RTYPE_CLONE(Point) COVARIANT_RTYPE_CLONE(ReactionGlyph) COVARIANT_RTYPE_CLONE(SpeciesGlyph) COVARIANT_RTYPE_CLONE(SpeciesReferenceGlyph) COVARIANT_RTYPE_CLONE(TextGlyph) COVARIANT_RTYPE_CLONE(ListOfGraphicalObjects) COVARIANT_RTYPE_CLONE(ListOfLayouts) COVARIANT_RTYPE_CLONE(ListOfLineSegments) COVARIANT_RTYPE_CLONE(ListOfReactionGlyphs) COVARIANT_RTYPE_CLONE(ListOfSpeciesGlyphs) COVARIANT_RTYPE_CLONE(ListOfSpeciesReferenceGlyphs) COVARIANT_RTYPE_CLONE(ListOfTextGlyphs) COVARIANT_RTYPE_CLONE(ListOfCompartmentGlyphs) #endif /** * * Wraps covariant return types of ListOfXXX::get functions. * */ %define COVARIANT_RTYPE_LISTOF_GET_REMOVE(_CNAME_) %typemap(jstype) _CNAME_* ListOf ## _CNAME_ ## s::get "_CNAME_" %typemap(jstype) _CNAME_* ListOf ## _CNAME_ ## s::remove "_CNAME_" %enddef COVARIANT_RTYPE_LISTOF_GET_REMOVE(CompartmentType) COVARIANT_RTYPE_LISTOF_GET_REMOVE(Compartment) COVARIANT_RTYPE_LISTOF_GET_REMOVE(EventAssignment) COVARIANT_RTYPE_LISTOF_GET_REMOVE(Event) COVARIANT_RTYPE_LISTOF_GET_REMOVE(FunctionDefinition) COVARIANT_RTYPE_LISTOF_GET_REMOVE(InitialAssignment) COVARIANT_RTYPE_LISTOF_GET_REMOVE(Parameter) COVARIANT_RTYPE_LISTOF_GET_REMOVE(Reaction) COVARIANT_RTYPE_LISTOF_GET_REMOVE(Rule) COVARIANT_RTYPE_LISTOF_GET_REMOVE(SpeciesType) COVARIANT_RTYPE_LISTOF_GET_REMOVE(UnitDefinition) COVARIANT_RTYPE_LISTOF_GET_REMOVE(Constraint) COVARIANT_RTYPE_LISTOF_GET_REMOVE(Unit) // Only ListOfSpecies and ListOfSpeciesReference classes do not // match the above macro... %typemap(jstype) Species* ListOfSpecies::get "Species" %typemap(jstype) Species* ListOfSpecies::remove "Species" %typemap(jstype) SimpleSpeciesReference* ListOfSpeciesReferences::get "SimpleSpeciesReference" %typemap(jstype) SimpleSpeciesReference* ListOfSpeciesReferences::remove "SimpleSpeciesReference" #ifdef USE_LAYOUT COVARIANT_RTYPE_LISTOF_GET_REMOVE(GraphicalObject) COVARIANT_RTYPE_LISTOF_GET_REMOVE(Layout) COVARIANT_RTYPE_LISTOF_GET_REMOVE(LineSegment) COVARIANT_RTYPE_LISTOF_GET_REMOVE(ReactionGlyph) COVARIANT_RTYPE_LISTOF_GET_REMOVE(SpeciesGlyph) COVARIANT_RTYPE_LISTOF_GET_REMOVE(SpeciesReferenceGlyph) COVARIANT_RTYPE_LISTOF_GET_REMOVE(TextGlyph) COVARIANT_RTYPE_LISTOF_GET_REMOVE(CompartmentGlyph) #endif /** * Ignores XMLToken::clone() in order to use XMLNode::clone(). * (XMLNode is a derived class of XMLToken) * In JDK 1.4.2, "XMLNode XMLNode::clone()" can't override * "XMLToken XMLToken::clone()" because JDK 1.4.2 doesn't * allow override with different return type. */ //%javamethodmodifiers XMLToken::clone "private" /** * Ignores XMLErrorLog::getError(unsigned int) in order to use * SBMLErrorLog::getError(unsigned int). * (XMLErrorLog is a derived class of SBMLErrorLog) * In JDK 1.4.2, "SBMLError* SBMLErrorLog::getError(unsigned int)" * can't override "XMLError* XMLErrorLog::getError(unsigned int)" * due to the above mentioned reason. */ //%javamethodmodifiers XMLErrorLog::getError "private" /** * Turns off object destruction. For testing purposes only. * * FIXME: Disable for the final 3.0 release. */ /* %typemap (javafinalize) SWIGTYPE %{ %} */ /** * Make most libSBML constants (e.g. SBMLTypecodes) Java compile-time * constants so they may be used in switch statements. */ %include "enumsimple.swg" %javaconst(1); /** * A bug in Swig prevents these four ASTNode constants being generated * as Java compile-time constants. Swig does not parse the following * enum correctly: * * typedef enum * { * AST_PLUS = '+' * , AST_MINUS = '-' * , AST_TIMES = '*' * , AST_DIVIDE = '/' * , AST_POWER = '^' * * * The generated Java code does not like the tick marks ('). To fix * this, we need to be explicit about (and duplicate) the value of * the constants here. */ %javaconstvalue("'+'") AST_PLUS; %javaconstvalue("'-'") AST_MINUS; %javaconstvalue("'*'") AST_TIMES; %javaconstvalue("'/'") AST_DIVIDE; %javaconstvalue("'^'") AST_POWER; #ifndef USE_LAYOUT /** * @return the most specific Java object possible for the given SBase * object. */ %pragma(java) modulecode = %{ /** * Internal method. This is not actually deprecated, but we * cheat and use @deprecated to hide this in the documentation * produced by Javadoc: * * @deprecated */ public static SBase DowncastSBase(long cPtr, boolean owner) { if (cPtr == 0) return null; SBase sb = new SBase(cPtr,false); switch( sb.getTypeCode() ) { case libsbmlConstants.SBML_COMPARTMENT: return new Compartment(cPtr, owner); case libsbmlConstants.SBML_COMPARTMENT_TYPE: return new CompartmentType(cPtr, owner); case libsbmlConstants.SBML_CONSTRAINT: return new Constraint(cPtr, owner); case libsbmlConstants.SBML_DOCUMENT: return new SBMLDocument(cPtr, owner); case libsbmlConstants.SBML_DELAY: return new Delay(cPtr, owner); case libsbmlConstants.SBML_EVENT: return new Event(cPtr, owner); case libsbmlConstants.SBML_EVENT_ASSIGNMENT: return new EventAssignment(cPtr, owner); case libsbmlConstants.SBML_FUNCTION_DEFINITION: return new FunctionDefinition(cPtr, owner); case libsbmlConstants.SBML_INITIAL_ASSIGNMENT: return new InitialAssignment(cPtr, owner); case libsbmlConstants.SBML_KINETIC_LAW: return new KineticLaw(cPtr, owner); case libsbmlConstants.SBML_LIST_OF: String name = sb.getElementName(); if(name.equals("listOf")){ return new ListOf(cPtr, owner); } else if(name.equals("listOfCompartments")){ return new ListOfCompartments(cPtr, owner); } else if(name.equals("listOfCompartmentTypes")){ return new ListOfCompartmentTypes(cPtr, owner); } else if(name.equals("listOfConstraints")){ return new ListOfConstraints(cPtr, owner); } else if(name.equals("listOfEvents")){ return new ListOfEvents(cPtr, owner); } else if(name.equals("listOfEventAssignments")){ return new ListOfEventAssignments(cPtr, owner); } else if(name.equals("listOfFunctionDefinitions")){ return new ListOfFunctionDefinitions(cPtr, owner); } else if(name.equals("listOfInitialAssignments")){ return new ListOfInitialAssignments(cPtr, owner); } else if(name.equals("listOfParameters")){ return new ListOfParameters(cPtr, owner); } else if(name.equals("listOfReactions")){ return new ListOfReactions(cPtr, owner); } else if(name.equals("listOfRules")){ return new ListOfRules(cPtr, owner); } else if(name.equals("listOfSpecies")){ return new ListOfSpecies(cPtr, owner); } else if(name.equals("listOfUnknowns")){ return new ListOfSpeciesReferences(cPtr, owner); } else if(name.equals("listOfReactants")){ return new ListOfSpeciesReferences(cPtr, owner); } else if(name.equals("listOfProducts")){ return new ListOfSpeciesReferences(cPtr, owner); } else if(name.equals("listOfModifiers")){ return new ListOfSpeciesReferences(cPtr, owner); } else if(name.equals("listOfSpeciesTypes")){ return new ListOfSpeciesTypes(cPtr, owner); } else if(name.equals("listOfUnits")){ return new ListOfUnits(cPtr, owner); } else if(name.equals("listOfUnitDefinitions")){ return new ListOfUnitDefinitions(cPtr, owner); } return new ListOf(cPtr, owner); case libsbmlConstants.SBML_MODEL: return new Model(cPtr, owner); case libsbmlConstants.SBML_PARAMETER: return new Parameter(cPtr, owner); case libsbmlConstants.SBML_REACTION: return new Reaction(cPtr, owner); case libsbmlConstants.SBML_SPECIES: return new Species(cPtr, owner); case libsbmlConstants.SBML_SPECIES_REFERENCE: return new SpeciesReference(cPtr, owner); case libsbmlConstants.SBML_MODIFIER_SPECIES_REFERENCE: return new ModifierSpeciesReference(cPtr, owner); case libsbmlConstants.SBML_SPECIES_TYPE: return new SpeciesType(cPtr, owner); case libsbmlConstants.SBML_TRIGGER: return new Trigger(cPtr, owner); case libsbmlConstants.SBML_UNIT_DEFINITION: return new UnitDefinition(cPtr, owner); case libsbmlConstants.SBML_UNIT: return new Unit(cPtr, owner); case libsbmlConstants.SBML_ALGEBRAIC_RULE: return new AlgebraicRule(cPtr, owner); case libsbmlConstants.SBML_ASSIGNMENT_RULE: return new AssignmentRule(cPtr, owner); case libsbmlConstants.SBML_RATE_RULE: return new RateRule(cPtr, owner); case libsbmlConstants.SBML_STOICHIOMETRY_MATH: return new StoichiometryMath(cPtr, owner); default: return new SBase(cPtr, owner); } } %} #else /** * @return the most specific Java object possible for the given SBase * object. */ %pragma(java) modulecode = %{ /** * Internal method. This is not actually deprecated, but we * cheat and use @deprecated to hide this in the documentation * produced by Javadoc: * * @deprecated */ public static SBase DowncastSBase(long cPtr, boolean owner) { if (cPtr == 0) return null; SBase sb = new SBase(cPtr,false); switch( sb.getTypeCode() ) { case libsbmlConstants.SBML_COMPARTMENT: return new Compartment(cPtr, owner); case libsbmlConstants.SBML_COMPARTMENT_TYPE: return new CompartmentType(cPtr, owner); case libsbmlConstants.SBML_CONSTRAINT: return new Constraint(cPtr, owner); case libsbmlConstants.SBML_DOCUMENT: return new SBMLDocument(cPtr, owner); case libsbmlConstants.SBML_DELAY: return new Delay(cPtr, owner); case libsbmlConstants.SBML_EVENT: return new Event(cPtr, owner); case libsbmlConstants.SBML_EVENT_ASSIGNMENT: return new EventAssignment(cPtr, owner); case libsbmlConstants.SBML_FUNCTION_DEFINITION: return new FunctionDefinition(cPtr, owner); case libsbmlConstants.SBML_INITIAL_ASSIGNMENT: return new InitialAssignment(cPtr, owner); case libsbmlConstants.SBML_KINETIC_LAW: return new KineticLaw(cPtr, owner); case libsbmlConstants.SBML_LIST_OF: String name = sb.getElementName(); if(name.equals("listOf")){ return new ListOf(cPtr, owner); } else if(name.equals("listOfCompartments")){ return new ListOfCompartments(cPtr, owner); } else if(name.equals("listOfCompartmentTypes")){ return new ListOfCompartmentTypes(cPtr, owner); } else if(name.equals("listOfConstraints")){ return new ListOfConstraints(cPtr, owner); } else if(name.equals("listOfEvents")){ return new ListOfEvents(cPtr, owner); } else if(name.equals("listOfEventAssignments")){ return new ListOfEventAssignments(cPtr, owner); } else if(name.equals("listOfFunctionDefinitions")){ return new ListOfFunctionDefinitions(cPtr, owner); } else if(name.equals("listOfInitialAssignments")){ return new ListOfInitialAssignments(cPtr, owner); } else if(name.equals("listOfParameters")){ return new ListOfParameters(cPtr, owner); } else if(name.equals("listOfReactions")){ return new ListOfReactions(cPtr, owner); } else if(name.equals("listOfRules")){ return new ListOfRules(cPtr, owner); } else if(name.equals("listOfSpecies")){ return new ListOfSpecies(cPtr, owner); } else if(name.equals("listOfUnknowns")){ return new ListOfSpeciesReferences(cPtr, owner); } else if(name.equals("listOfReactants")){ return new ListOfSpeciesReferences(cPtr, owner); } else if(name.equals("listOfProducts")){ return new ListOfSpeciesReferences(cPtr, owner); } else if(name.equals("listOfModifiers")){ return new ListOfSpeciesReferences(cPtr, owner); } else if(name.equals("listOfSpeciesTypes")){ return new ListOfSpeciesTypes(cPtr, owner); } else if(name.equals("listOfUnits")){ return new ListOfUnits(cPtr, owner); } else if(name.equals("listOfUnitDefinitions")){ return new ListOfUnitDefinitions(cPtr, owner); } else if(name.equals("listOfCompartmentGlyphs")){ return new ListOfCompartmentGlyphs(cPtr, owner); } else if(name.equals("listOfAdditionalGraphicalObjects")){ return new ListOfGraphicalObjects(cPtr, owner); } else if(name.equals("listOfLayouts")){ return new ListOfLayouts(cPtr, owner); } else if(name.equals("listOfCurveSegments")){ return new ListOfLineSegments(cPtr, owner); } else if(name.equals("listOfSpeciesGlyphs")){ return new ListOfSpeciesGlyphs(cPtr, owner); } else if(name.equals("listOfSpeciesReferenceGlyphs")){ return new ListOfSpeciesReferenceGlyphs(cPtr, owner); } else if(name.equals("listOfReactionGlyphs")){ return new ListOfReactionGlyphs(cPtr, owner); } else if(name.equals("listOfTextGlyphs")){ return new ListOfTextGlyphs(cPtr, owner); } return new ListOf(cPtr, owner); case libsbmlConstants.SBML_MODEL: return new Model(cPtr, owner); case libsbmlConstants.SBML_PARAMETER: return new Parameter(cPtr, owner); case libsbmlConstants.SBML_REACTION: return new Reaction(cPtr, owner); case libsbmlConstants.SBML_SPECIES: return new Species(cPtr, owner); case libsbmlConstants.SBML_SPECIES_REFERENCE: return new SpeciesReference(cPtr, owner); case libsbmlConstants.SBML_MODIFIER_SPECIES_REFERENCE: return new ModifierSpeciesReference(cPtr, owner); case libsbmlConstants.SBML_SPECIES_TYPE: return new SpeciesType(cPtr, owner); case libsbmlConstants.SBML_TRIGGER: return new Trigger(cPtr, owner); case libsbmlConstants.SBML_UNIT_DEFINITION: return new UnitDefinition(cPtr, owner); case libsbmlConstants.SBML_UNIT: return new Unit(cPtr, owner); case libsbmlConstants.SBML_ALGEBRAIC_RULE: return new AlgebraicRule(cPtr, owner); case libsbmlConstants.SBML_ASSIGNMENT_RULE: return new AssignmentRule(cPtr, owner); case libsbmlConstants.SBML_RATE_RULE: return new RateRule(cPtr, owner); case libsbmlConstants.SBML_STOICHIOMETRY_MATH: return new StoichiometryMath(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_BOUNDINGBOX: return new BoundingBox(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_COMPARTMENTGLYPH: return new CompartmentGlyph(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_CUBICBEZIER: return new CubicBezier(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_CURVE: return new Curve(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_DIMENSIONS: return new Dimensions(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_GRAPHICALOBJECT: return new GraphicalObject(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_LAYOUT: return new Layout(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_LINESEGMENT: return new LineSegment(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_POINT: return new Point(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_REACTIONGLYPH: return new ReactionGlyph(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_SPECIESGLYPH: return new SpeciesGlyph(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_SPECIESREFERENCEGLYPH: return new SpeciesReferenceGlyph(cPtr, owner); case libsbmlConstants.SBML_LAYOUT_TEXTGLYPH: return new TextGlyph(cPtr, owner); default: return new SBase(cPtr, owner); } } %} #endif /* ! USE_LAYOUT */ /** * Convert SBase objects into the most specific object possible. */ %typemap("javaout") SBase* { return libsbml.DowncastSBase($jnicall, $owner); } /** * Convert Rule objects into the most specific object possible. */ %typemap("javaout") Rule* { return (Rule) libsbml.DowncastSBase($jnicall, $owner); } /** * Convert SimpleSpeciesReference objects into the most specific object possible. */ %typemap("javaout") SimpleSpeciesReference* { return (SimpleSpeciesReference) libsbml.DowncastSBase($jnicall, $owner); } #ifdef USE_LAYOUT /** * Convert LineSegment objects into the most specific object possible. */ %typemap("javaout") LineSegment* { return (LineSegment) libsbml.DowncastSBase($jnicall, $owner); } /** * Convert LineSegment objects into the most specific object possible. */ %typemap("javaout") GraphicalObject* { return (GraphicalObject) libsbml.DowncastSBase($jnicall, $owner); } #endif /* USE_LAYOUT */ /** * getCPtrAndDisown() is like getCPtr() but it also sets the SWIG memory * ownsership flag to false. * * We used to use %typemap(javagetcptr), but this has been deprecated * in SWIG 1.3.24. Instead we add getCPtrAndDisown() from the incantation * below (taken from the SWIG 1.3.24 CHANGES file). */ /* Utility macro for manipulating the Java body code method attributes */ %define SWIGJAVA_ATTRIBS(TYPENAME, CTOR_ATTRIB, GETCPTR_ATTRIB) %typemap(javabody) TYPENAME %{ private long swigCPtr; protected boolean swigCMemOwn; CTOR_ATTRIB $javaclassname(long cPtr, boolean cMemoryOwn) { swigCMemOwn = cMemoryOwn; swigCPtr = cPtr; } GETCPTR_ATTRIB static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } GETCPTR_ATTRIB static long getCPtrAndDisown ($javaclassname obj) { long ptr = 0; if (obj != null) { ptr = obj.swigCPtr; obj.swigCMemOwn = false; } return ptr; } %} %typemap(javabody_derived) TYPENAME %{ private long swigCPtr; CTOR_ATTRIB $javaclassname(long cPtr, boolean cMemoryOwn) { super($moduleJNI.SWIG$javaclassnameUpcast(cPtr), cMemoryOwn); swigCPtr = cPtr; } GETCPTR_ATTRIB static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } GETCPTR_ATTRIB static long getCPtrAndDisown ($javaclassname obj) { long ptr = 0; if (obj != null) { ptr = obj.swigCPtr; obj.swigCMemOwn = false; } return ptr; } %} %enddef /* The default is protected getCPtr, protected constructor */ SWIGJAVA_ATTRIBS(SWIGTYPE, protected, protected) /* Public getCPtr method, protected constructor */ %define PUBLIC_GETCPTR(TYPENAME) SWIGJAVA_ATTRIBS(TYPENAME, protected, public) %enddef /* Public getCPtr method, public constructor */ %define PUBLIC_BODYMETHODS(TYPENAME) SWIGJAVA_ATTRIBS(TYPENAME, public, public) %enddef /** * * Overrides the 'equals' method for SBase subclasses and other classes * in libsbml. * * By default, 'equals' method ( and '==' operator) for each wrapped class * object returns 'true' if the given two objects refer to the same * *Java proxy object* (not the underlying C++ object). * For example, the following code returns 'true'. * * Model m = new Model(); * m.createReaction(); * Reaction r1 = m.getReaction(0); * Reaction r2 = r1; * return r1.equals(r2); <---- this returns 'true' * * On the other hand, the following code returns 'false' in spite of * the same underlying C++ objects. * * Model m = new Model(); * m.createReaction(); * Reaction r1 = m.getReaction(0); * Reaction r2 = m.getReaction(0); * return r1.equals(r2); <---- this returns 'false' * * The following override changes the behaviour of 'equals' method such that * returns 'true' if the given two objects refer to the same underlying C++ * object (i.e. 'true' is returned in the both above examples). * * (Unfortunately, '==' operator can't be overidden in Java. * Thus, the underlying C++ objects can't be compared by the '==' operator.) * */ %define SWIGJAVA_EQUALS(CLASS) %typemap("javacode") CLASS %{ /** * Equality comparison method for CLASS. *
* Because the Java methods for libSBML are actually wrappers around code
* implemented in C++ and C, certain operations will not behave as
* expected. Equality comparison is one such case. An instance of a
* libSBML object class is actually a proxy object
* wrapping the real underlying C/C++ object. The normal ==
* equality operator in Java will only compare the Java proxy objects,
* not the underlying native object. The result is almost never what you
* want in practical situations. Unfortunately, Java does not provide a
* way to override ==
.
*
* The alternative that must be followed is to use the
* equals()
method. The equals
method on this
* class overrides the default java.lang.Object one, and performs an
* intelligent comparison of instances of objects of this class. The
* result is an assessment of whether two libSBML Java objects are truly
* the same underlying native-code objects.
*
* The use of this method in practice is the same as the use of any other
* Java equals
method. For example,
* a.equals(
b)
returns
* true
if a and b are references to the
* same underlying object.
*
* @param sb a reference to an object to which the current object
* instance will be compared
*
* @return true
if sb
refers to the same underlying
* native object as this one, false
otherwise
*/
public boolean equals(Object sb)
{
if ( this == sb )
{
return true;
}
return swigCPtr == getCPtr((CLASS)(sb));
}
/**
* Returns a hashcode for this CLASS object.
*
* @return a hash code usable by Java methods that need them.
*/
public int hashCode()
{
return (int)(swigCPtr^(swigCPtr>>>32));
}
%}
%enddef
SWIGJAVA_EQUALS(SBase)
SWIGJAVA_EQUALS(SBMLReader)
SWIGJAVA_EQUALS(SBMLWriter)
SWIGJAVA_EQUALS(ASTNode)
SWIGJAVA_EQUALS(CVTerm)
SWIGJAVA_EQUALS(Date)
SWIGJAVA_EQUALS(ModelHistory)
SWIGJAVA_EQUALS(ModelCreator)
SWIGJAVA_EQUALS(XMLNamespaces)
SWIGJAVA_EQUALS(XMLAttributes)
SWIGJAVA_EQUALS(XMLToken)
SWIGJAVA_EQUALS(XMLNode)
SWIGJAVA_EQUALS(XMLTriple)
SWIGJAVA_EQUALS(XMLError)
SWIGJAVA_EQUALS(XMLErrorLog)
SWIGJAVA_EQUALS(XMLHandler)
SWIGJAVA_EQUALS(XMLOutputStream)
SWIGJAVA_EQUALS(XMLInputStream)
/**
* Part of libSBML methods takeover ownership of passed-in objects, so we need
* to make sure SWIG disowns the object.
* (Most libSBML methods don't takeover ownership since 3.0.0)
*
*/
/**
* takeover ownership
*
* - void ListOf::appendAndOwn(SBase* item)
*/
%typemap(javain) SBase* item "SBase.getCPtrAndDisown($javainput)";
%typemap(javain) const SBase* item "SBase.getCPtr($javainput)";
/**
* takeover ownership
*
* - void ASTNode::addChild (ASTNode* child)
* - void ASTNode::prependChild (ASTNode* child)
*/
%typemap(javain) ASTNode* child "ASTNode.getCPtrAndDisown($javainput)";
%typemap(javain) const ASTNode* child "ASTNode.getCPtr($javainput)";
/**
* takeover ownership
*
* - void ASTNode::insertChild (unsigned int n, ASTNode *newChild)
* - void ASTNode::replaceChild(unsigned int n, ASTNode *newChild)
*/
%typemap(javain) ASTNode* newChild "ASTNode.getCPtrAndDisown($javainput)";
%typemap(javain) const ASTNode* newChild "ASTNode.getCPtr($javainput)";
/**
* takeover ownership
*
* - void ASTNode::addSemanticsAnnotation (XMLNode* sAnnotation);
*/
%typemap(javain) XMLNode* sAnnotation "XMLNode.getCPtrAndDisown($javainput)";
%typemap(javain) const XMLNode* sAnnotation "XMLNode.getCPtr($javainput)";
/**
* On Windows, a string for filename should be encoded by ANSI CP
* instead of UTF-8 because file I/O APIs internally used in libSBML
* requires an ANSI CP encoded string for the given filename.
*
* 1) SBMLReader::readSBML(const std::string& filename)
* 2) readSBML(const char* filename)
* 3) SBMLWriter::writeSBML(SBMLDocument*, const std::string& filename)
* 4) writeSBML(SBMLDocument*, const char* filename)
*/
//
// UTF8 -> ANSI CP (for const std::string& filename)
//
%typemap("in") const std::string& filename (const char* arg_pstr, std::string arg_str)
%{
if(!$input) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null std::string");
return $null;
}
arg_pstr = (char const *)jenv->GetStringUTFChars($input, 0);
if (!arg_pstr) return $null;
#ifdef WIN32
char* mbstr = convertUTF8ToACP(arg_pstr);
if (!mbstr)
{
jenv->ReleaseStringUTFChars($input, arg_pstr);
return $null;
}
arg_str.assign(mbstr);
delete[] mbstr;
#else
arg_str.assign(arg_pstr);
#endif
$1 = &arg_str;
jenv->ReleaseStringUTFChars($input, arg_pstr);
%}
//
// Unicode -> ANSI CP (for const char* filename)
//
%typemap("in") const char* filename (const char* arg_pstr)
%{
if ($input) {
arg_pstr = (char const *)jenv->GetStringUTFChars($input, 0);
if (!arg_pstr) return $null;
}
else
{
arg_pstr = 0;
}
#ifdef WIN32
$1 = convertUTF8ToACP(arg_pstr);
if (!$1)
{
jenv->ReleaseStringUTFChars($input, (const char*)arg_pstr);
return $null;
}
jenv->ReleaseStringUTFChars($input, (const char*)arg_pstr);
#else
$1 = (char*)arg_pstr;
#endif
%}
%typemap("freearg") const char* filename
%{
#ifdef WIN32
delete[] $1;
#else
if ($1) jenv->ReleaseStringUTFChars($input, (const char*)$1);
#endif
%}
/**
* Some combinations of platforms and underlying XML parsers *require*
* an absolute path to a filename while others do not. It's best to
* hide this from the end-user by making SBMLReader.readSBML() and
* readSBML() always compute an absolute path and filename.
*/
%pragma(java) modulecode =
%{
static String getAbsolutePath(String filename)
{
java.io.File file = new java.io.File(filename);
return file.getAbsolutePath();
}
%}
%typemap("javain") const std::string& filename "libsbml.getAbsolutePath($javainput)";
%typemap("javain") const char* filename "libsbml.getAbsolutePath($javainput)";
/**
* Wraps std::ostream by implementing three simple wrapper classes.
*
* 1) OStream wraps std::cout, std::cerr, and std::clog.
* The following public final static variables are provied in
* libsbml class like in C++.
*
* 1. public final static OStream cout;
* 2. public final static OStream cerr;
* 3. public final static OStream clog;
*
* 2) OFStream (derived class of OStream) wraps std::ofstream
* with ios_base::cout (default) or ios_base::app flag.
*
* 3) OStringStream (derived class of OStream) wraps std::ostringstream.
*
* These wrapper classes provide only the minimum functions.
*
* (sample code) -----------------------------------------------------
*
* 1. wraps std::cout
*
* XMLOutputStream xos = new XMLOutputStream(libsbml.cout);
*
* 2. wraps std::cerr
*
* SBMLDocument d = libsbml.readSBML("foo.xml");
* if ( d.getNumErrors() > 0) {
* d.printErrors(libsbml.cerr);
* }
*
* 3. wraps std::ofstream (write to file "foo.xml")
*
* OFStream ofs = new OFStream("foo.xml");
* SBMLDocument d = libsbml.readSBML("foo.xml");
* SBMLWriter w = new SBMLWriter();
* w.writeSBML(d,ofs);
*
* 4. wraps std::ofstream (write to file "foo.xml" with append mode)
*
* OFStream ofs = new OFStream("foo.xml",true);
* XMLOutputStream xos = new XMLOutputStream(ofs);
*
* 5. wraps std::ostringstream
*
* OStringStream oss = new OStringStream();
* XMLOutputStream xos = new XMLOutputStream(oss);
* ...
* oss.endl();
* String s = oss.str();
*
*/
%typemap(jstype) std::ostream& "OStream"
%typemap(javain) std::ostream& "SWIGTYPE_p_std__ostream.getCPtr($javainput.get_ostream())";
%include "OStream.h"
%{
#include "OStream.cpp"
%}
%pragma(java) modulecode =
%{
/**
* Stream handle for low-level C++ standard output stream.
*
* A few libSBML methods accept an argument for indicating where to send * text string output. An example is the {@link * SBMLDocument#printErrors} method. However, the methods use C++ style * streams and not Java stream objects. The OStream object class in the * libSBML Java interface provides a wrapper for the underlying C++ * streams. The present object (cout) is a static final variable that * can be used directly from your code. An example use might be * something like this: *
*
* SBMLDocument document = libsbml.readSBML("somefile.xml"); * if (document.getNumErrors() > 0) * { * document.printErrors(libsbml.cout); * println("Please correct the above problems first."); * System.exit(1); * }
* A few libSBML methods accept an argument for indicating where to send * text string output. An example is the {@link * SBMLDocument#printErrors} method. However, the methods use C++ style * streams and not Java stream objects. The OStream object class in the * libSBML Java interface provides a wrapper for the underlying C++ * streams. The present object (cerr) is a static final variable that * can be used directly from your code. An example use might be * something like this: *
*
* SBMLDocument document = libsbml.readSBML("somefile.xml"); * if (document.getNumErrors() > 0) * { * document.printErrors(libsbml.cerr); * println("Please correct the above problems first."); * System.exit(1); * }
* By default, most operating systems have have their standard error and * logging output streams directed to the console/terminal, and this is * where text messages will be shown. This can usually be redirected * elsewhere, although how to do this depends on the specific environment * where the program is running. * * @see #cout * @see #clog */ public final static OStream cerr; /** * Stream handle for low-level C++ standard logging stream. *
* A few libSBML methods accept an argument for indicating where to send * text string output. An example is the {@link * SBMLDocument#printErrors} method. However, the methods use C++ style * streams and not Java stream objects. The OStream object class in the * libSBML Java interface provides a wrapper for the underlying C++ * streams. The present object (clog) is a static final variable that * can be used directly from your code. An example use might be * something like this: *
*
* SBMLDocument document = libsbml.readSBML("somefile.xml"); * if (document.getNumErrors() > 0) * { * document.printErrors(libsbml.clog); * println("Please correct the above problems first."); * System.exit(1); * }
* By default, most operating systems have have their standard error and
* logging output streams directed to the console/terminal, and this is
* where text messages will be shown. This can usually be redirected
* elsewhere, although how to do this depends on the specific environment
* where the program is running.
*
* @see #cout
* @see #cerr
*/
public final static OStream clog;
static {
cout = new OStream(OStream.COUT);
cerr = new OStream(OStream.CERR);
clog = new OStream(OStream.CLOG);
}
/**
* This private constructor does nothing and never invoked.
* The purpose of this constuctor is to hide a default constructor of this
* class in javadoc documentation.
*/
private libsbml() {}
%}
/**
* Wraps the following functions by using the corresponding
* ListWrapper