/******************************************************************************* * Copyright 2012 Analog Devices, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ********************************************************************************/ package com.analog.lyric.dimple.matlabproxy.repeated; import com.analog.lyric.dimple.exceptions.DimpleException; import com.analog.lyric.dimple.matlabproxy.PHelpers; import com.analog.lyric.dimple.matlabproxy.PNodeVector; import com.analog.lyric.dimple.matlabproxy.PVariableVector; import com.analog.lyric.dimple.model.domains.Domain; import com.analog.lyric.dimple.model.repeated.IDataSink; import com.analog.lyric.dimple.model.repeated.IDataSource; import com.analog.lyric.dimple.model.repeated.VariableStreamBase; import com.analog.lyric.dimple.model.repeated.VariableStreamSlice; import com.analog.lyric.dimple.model.variables.Variable; public abstract class PVariableStreamBase implements IPVariableStreamSlice { private VariableStreamBase<?> [] _modelObjects; public PVariableStreamBase(Domain domain, int numVars) { _modelObjects = new VariableStreamBase[numVars]; for (int i = 0; i < numVars; i++) _modelObjects[i] = createVariable(domain); } protected abstract VariableStreamBase<?> createVariable(Domain domain); public PVariableStreamSlice getSlice(int startVal) { VariableStreamSlice<?> [] vars = new VariableStreamSlice<?>[_modelObjects.length]; for (int i = 0; i < vars.length; i++) vars[i] = _modelObjects[i].getSlice(startVal); return new PVariableStreamSlice(vars); } @Override public VariableStreamBase<?> [] getModelerObjects() { return _modelObjects; } public PVariableVector getVariables() { PVariableVector retval = new PVariableVector(); for (int i = 0; i < _modelObjects.length; i++) { PVariableVector pvarvector = PHelpers.convertToVariableVector(_modelObjects[i].getVariables()); retval = (PVariableVector)retval.concat(new PNodeVector[]{pvarvector}); } //This will ensure that it is cast to the right type return PHelpers.convertToVariableVector(retval.getVariableArray()); } public int size() { return _modelObjects[0].size(); } public PVariableVector get(int index) { Variable [] vars = new Variable[_modelObjects.length]; for (int i = 0; i < vars.length; i++) vars[i] = _modelObjects[i].get(index); return PHelpers.convertToVariableVector(vars); } public void setDataSource(IPDataSource dataSource) { IDataSource [] ds = dataSource.getModelObjects(); if (ds.length != _modelObjects.length) throw new DimpleException("DataSource size does not match"); for (int i = 0; i < ds.length; i++) _modelObjects[i].setDataSource(ds[i]); } public void setDataSink(IPDataSink dataSink) { IDataSink [] ds = dataSink.getModelObjects(); if (ds.length != _modelObjects.length) throw new DimpleException("DataSource size does not match"); for (int i = 0; i < ds.length; i++) _modelObjects[i].setDataSink(ds[i]); } public IPDataSource getDataSource() { return PHelpers.getDataSources(getModelerObjects()); } public IPDataSink getDataSink() { return PHelpers.getDataSinks(getModelerObjects()); } }