JBoolean
SCCircuitVarList::AddFunction
	(
	const JCharacter*	name,
	const JFunction&	f,
	const JBoolean		visible
	)
{
	JIndex index;
	if (!JNameValid(name))
		{
		return kJFalse;
		}
	else if (ParseVariableName(name, strlen(name), &index))
		{
		(JGetUserNotification())->ReportError("This variable name is already used.");
		return kJFalse;
		}
	else
		{
		VarInfo info;

		info.name = new JString(name);
		assert( info.name != NULL );

		info.f       = f.Copy();
		info.visible = visible;

		itsVars->AppendElement(info);
		Broadcast(VarInserted(GetElementCount()));
		return kJTrue;
		}
}
void
SCPlotDirector::AddFunction
	(
	const JFunction&	f,
	const JCharacter*	name,
	const JFloat		xMin,
	const JFloat		xMax
	)
{
	AddFunction(f.Copy(), name, xMin, xMax);
}
JNaryFunction::JNaryFunction
	(
	const JNaryFunction& source
	)
	:
	JFunctionWithArgs(source)
{
	itsArgList = new JPtrArray<JFunction>(JPtrArrayT::kDeleteAll, kMaxReasonableArgCount);
	assert( itsArgList != NULL );

	const JSize argCount = (source.itsArgList)->GetElementCount();

	for (JIndex i=1; i<=argCount; i++)
		{
		JFunction* sourceArg = (source.itsArgList)->GetElement(i);
		JFunction* arg       = sourceArg->Copy();
		itsArgList->Append(arg);
		}
}
JBoolean
SCCircuitVarList::SetFunction
	(
	const JIndex		index,
	const JFunction&	f
	)
{
	if (IsFunction(index))
		{
		VarInfo info = itsVars->GetElement(index);
		delete (info.f);
		info.f = f.Copy();
		itsVars->SetElement(index, info);
		Broadcast(VarValueChanged(index,1));
		return kJTrue;
		}
	else
		{
		return kJFalse;
		}
}