java.lang.Object
org.bzdev.devqsim.SimObject
org.bzdev.devqsim.DefaultSimObject
org.bzdev.devqsim.SimFunction
- All Implemented Interfaces:
DoubleUnaryOperator
,RealValuedFunctOps
,RealValuedFunctVAOps
,NamedFunctionOps
,NamedObjectOps
Factory for simulation objects in which an object represents
a RealValuedFunction.
-
Constructor Summary
ConstructorsConstructorDescriptionSimFunction
(Simulation sim, String name, boolean intern, Object fobj) Constructor given a RealValuedFunction or a scripting-language-defined object.SimFunction
(Simulation sim, String name, boolean intern, String fname, String fpname, String fppname) Constructor given the names of scripting-language-defined functions that will implement a function and its first and second derivatives.SimFunction
(Simulation sim, String name, boolean intern, RealValuedFunctOps f) Constructor given a RealValuedFunctOps, provided so that the function can be defined using a lambda expression that takes one argument, or given an instance of RealValuedFunction.SimFunction
(Simulation sim, String name, boolean intern, RealValuedFunctOps f, RealValuedFunctOps fp, RealValuedFunctOps fpp) Constructor given a RealValuedFunctOps, provided so that the function can be defined using a lambda expression that takes one argument. -
Method Summary
Modifier and TypeMethodDescriptionboolean
Determine if this named object can be deleted.protected Object
clone()
Creates and returns a copy of this object.final boolean
delete()
Delete an object.final boolean
Determine if an object is being deleted.double
derivAt
(double x) Evaluate the function's first derivative.boolean
Determine if the maximum value for the domain is in the domainboolean
Determine if the minimum value for the domain is in the domaindouble
Get the maximum value in the domain of the function.double
Get the minimum value in the domain of the function.Get the RealValuedFunction associated with this named object.final String
getName()
Get an object's name.protected Simulation
Get the object namer for a named object.final boolean
Determine if an object has been deleted.boolean
Determine if an object is interned in a object namer's tables.double
secondDerivAt
(double x) Evaluate the function's second derivative.double
valueAt
(double x) Call the function.Methods inherited from class org.bzdev.devqsim.DefaultSimObject
getSimulation, printConfiguration, printState
Methods inherited from class org.bzdev.devqsim.SimObject
addSimulationListener, addTraceSet, bindCallable, bindCallable, bindCallable, bindCallable, bindRunnable, bindRunnable, bindRunnable, bindRunnable, callableObject, callableScript, callScriptFunction, callScriptMethod, clearTraceSets, evalScript, getEventListenerList, getScriptObject, getTraceSets, onDelete, printConfiguration, printConfiguration, printConfiguration, printConfiguration, printConfiguration, printConfiguration, printState, printState, printState, printState, printState, printState, putScriptObject, removeSimulationListener, removeTraceSet, runnableObject, runnableScript, scheduleCall, scheduleCall, scheduleCall, scheduleCall, scheduleCallObject, scheduleScript, scheduleTask, scheduleTask, scheduleTask, scheduleTask, scheduleTaskObject, scheduleTaskScript, startImmediateTask, startImmediateTask, trace, trace, unscheduledTaskThread, unscheduledTaskThread, update, update, usesTraceSet
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.bzdev.obnaming.NamedObjectOps
canDelete, delete, deletePending, getName, isDeleted, isInterned
Methods inherited from interface org.bzdev.math.RealValuedFunctOps
andThen, andThen, applyAsDouble, compose, compose, maxArgLength, minArgLength, valueAt
-
Constructor Details
-
SimFunction
public SimFunction(Simulation sim, String name, boolean intern, Object fobj) throws IllegalArgumentException Constructor given a RealValuedFunction or a scripting-language-defined object. SimFunction objects can be looked up by name using the methods inSimulation
.- Parameters:
sim
- the simulationname
- the name of the object; null for an automatically generated nameintern
- true if the object can be looked up by using the methods inSimulation
; false otherwise.fobj
- the function specified as an instance of RealValuedFunction or a scripting-language-defined object; null to return a SimFunction such that getFunction() will return null- Throws:
IllegalArgumentException
- typically means a name is already in use- See Also:
-
SimFunction
public SimFunction(Simulation sim, String name, boolean intern, RealValuedFunctOps f) throws IllegalArgumentException Constructor given a RealValuedFunctOps, provided so that the function can be defined using a lambda expression that takes one argument, or given an instance of RealValuedFunction. SimFunction objects can be looked up by name using the methods inSimulation
.- Parameters:
sim
- the simulationname
- the name of the objectintern
- true if the object can be looked up by using the methods inSimulation
; false otherwise.f
- the function specified; null to return a SimFunction such that getFunction() will return null- Throws:
IllegalArgumentException
- typically means a name is already in use- See Also:
-
SimFunction
public SimFunction(Simulation sim, String name, boolean intern, RealValuedFunctOps f, RealValuedFunctOps fp, RealValuedFunctOps fpp) throws IllegalArgumentException Constructor given a RealValuedFunctOps, provided so that the function can be defined using a lambda expression that takes one argument. SimFunction objects can be looked up by name using the methods inSimulation
.- Parameters:
sim
- the simulationname
- the name of the objectintern
- true if the object can be looked up by using the methods inSimulation
; false otherwise.f
- the function specified; null to return a SimFunction such that getFunction() will return nullfp
- a function providing the the first derivative of the function specified; null if the first derivative is not providedfpp
- a function providing the second derivative of the function specified; null if the first derivative is not provided- Throws:
IllegalArgumentException
- typically means a name is already in use- See Also:
-
SimFunction
public SimFunction(Simulation sim, String name, boolean intern, String fname, String fpname, String fppname) throws IllegalArgumentException Constructor given the names of scripting-language-defined functions that will implement a function and its first and second derivatives. SimFunction objects can be looked up by name using the methods inSimulation
.- Parameters:
sim
- the simulationname
- the name of the objectintern
- true if the object can be looked up by using the methods inSimulation
; false otherwise.fname
- the name of the scripting-language-defined function giving the value of this functionfpname
- the name of the scripting-language-defined function giving the value of this function's first derivative; null if a first derivative is not provided.fppname
- the name of the scripting-language-defined function giving the value of this function's second derivative; null if a second derivative is not provided.- Throws:
IllegalArgumentException
- typically means a name is already in use- See Also:
-
-
Method Details
-
getFunction
Description copied from interface:NamedFunctionOps
Get the RealValuedFunction associated with this named object.- Specified by:
getFunction
in interfaceNamedFunctionOps
- Returns:
- the function; null if not defined
-
getDomainMin
public double getDomainMin()Description copied from interface:NamedFunctionOps
Get the minimum value in the domain of the function.- Specified by:
getDomainMin
in interfaceNamedFunctionOps
- Returns:
- the minimum value
-
domainMinClosed
public boolean domainMinClosed()Description copied from interface:NamedFunctionOps
Determine if the minimum value for the domain is in the domain- Specified by:
domainMinClosed
in interfaceNamedFunctionOps
- Returns:
- true if the domain's minimum value is in the domain; false otherwise
-
getDomainMax
public double getDomainMax()Description copied from interface:NamedFunctionOps
Get the maximum value in the domain of the function.- Specified by:
getDomainMax
in interfaceNamedFunctionOps
- Returns:
- the maximum value
-
domainMaxClosed
public boolean domainMaxClosed()Description copied from interface:NamedFunctionOps
Determine if the maximum value for the domain is in the domain- Specified by:
domainMaxClosed
in interfaceNamedFunctionOps
- Returns:
- true if the maximum value for the domain is in the domain; false otherwise
-
valueAt
Description copied from interface:NamedFunctionOps
Call the function.- Specified by:
valueAt
in interfaceNamedFunctionOps
- Specified by:
valueAt
in interfaceRealValuedFunctOps
- Parameters:
x
- the function's argument- Returns:
- the value of the function for the given argument
- Throws:
IllegalArgumentException
- the function's argument was out of rangeUnsupportedOperationException
- the operation is not supported.
-
derivAt
Description copied from interface:NamedFunctionOps
Evaluate the function's first derivative.- Specified by:
derivAt
in interfaceNamedFunctionOps
- Parameters:
x
- the function's argument- Returns:
- the value of the function for the given argument
- Throws:
IllegalArgumentException
- the function's argument was out of rangeUnsupportedOperationException
- the operation is not supported.
-
secondDerivAt
public double secondDerivAt(double x) throws IllegalArgumentException, UnsupportedOperationException Description copied from interface:NamedFunctionOps
Evaluate the function's second derivative.- Specified by:
secondDerivAt
in interfaceNamedFunctionOps
- Parameters:
x
- the function's argument- Returns:
- the value of the function for the given argument
- Throws:
IllegalArgumentException
- the function's argument was out of rangeUnsupportedOperationException
- the operation is not supported.
-
clone
Creates and returns a copy of this object. This method will throw the exception CloneNotSupportedException if the object is interned.- Overrides:
clone
in classObject
- Throws:
CloneNotSupportedException
- a clone could not be created- See Also:
-
isInterned
public boolean isInterned()Determine if an object is interned in a object namer's tables.- Specified by:
isInterned
in interfaceNamedObjectOps
- Returns:
- true if the object is interned; false if not
-
getObjectNamer
Get the object namer for a named object.- Returns:
- the object namer for this named object
-
getName
Get an object's name.- Specified by:
getName
in interfaceNamedObjectOps
- Returns:
- the name of the object
-
canDelete
public boolean canDelete()Determine if this named object can be deleted. A named object can be deleted if the method delete has not been called and if the object is not in a state that prevents the object from being deleted. Subclasses that override this method must call canDelete() for their superclasses and return false if the superclass' canDelete method returns false. The default method returns true if delete() has not been called and returned true.- Specified by:
canDelete
in interfaceNamedObjectOps
- Returns:
- true if this object can be deleted; false otherwise
-
delete
public final boolean delete()Delete an object. An object can only be deleted once. If this method returns true, the object (if interned) will have been removed from the object namer tables.The implementations provided by
DefaultNamedObect
and generated because of a@NamedObject
annotation provide a protected method named onDelete. A subclass that overrides onDelete() must call the onDelete method of its superclass after it's onDelete method has been called and any cleanup actions performed. In some cases, this may happen at a later time (e.g., if a thread is used for some of the cleanup operations or if it is otherwise necessary to wait).- Specified by:
delete
in interfaceNamedObjectOps
- Returns:
- true if the deletion request was accepted; false otherwise
-
isDeleted
public final boolean isDeleted()Determine if an object has been deleted. An object is deleted if the method delete() has been called and returned true.- Specified by:
isDeleted
in interfaceNamedObjectOps
- Returns:
- true if deleted; false otherwise
-
deletePending
public final boolean deletePending()Determine if an object is being deleted. An deletion is pending if the method delete() has been called and returned true but the deletion has not been completed.- Specified by:
deletePending
in interfaceNamedObjectOps
- Returns:
- true if deletion is pending; false otherwise
-