blob: 9dced27fca971a0597320e14917872533c34de78 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004-2008 Andras Schmidt, Andras Balogh, Istvan Rath and Daniel Varro
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Andras Schmidt, Andras Balogh, Istvan Rath - initial API and implementation
*******************************************************************************/
package org.eclipse.viatra2.core.simple.tempdata;
/**
* Temporary data is valid as long as the state counter of the model
* (incremented at all model changes) is equal to the state when this temporary
* data was created. In other words, temporary data is a dependent information
* on the VPM model.
*
* @author Andras Schmidt
*
*/
public class TemporaryData<E> {
/**
* The state when this data is valid.
*/
int createdAtState;
/**
* The data stored in this container.
*/
E o;
/**
* Instantiate a container
*
* @param state
* The state when this data is valid.
* @param o
* The data stored in this container.
*/
TemporaryData(int state, E o) {
createdAtState = state;
this.o = o;
}
/**
* Instantiate a container with data never valid
*/
TemporaryData() {
createdAtState = -1;
o = null;
}
/**
* Check whether the data is valid at curren state.
*
* @param currentState
* the state of the VPM model
* @return true is data is still valid
*/
public boolean isValid(int currentState) {
if (currentState == createdAtState)
return o != null;
else {
o = null;
return false;
}
}
/**
* The data stored in this container
*
* @param currentState
* the state of VPM model
* @return The data stored in this container or null if data is not valid
*/
public E getObject(int currentState) {
if (isValid(currentState))
return o;
else {
o = null;
return null;
}
}
/**
* Set the new value of the data
*
* @param state
* The state when this data is valid.
* @param o
* The data stored in this container.
*/
public void setObject(int currentState, E o) {
//this.discard(); // experimental
createdAtState = currentState;
this.o = o;
}
/**
* Clear this tempdata object
*
* @return 1 if this container stored a value. 0 if not.
*/
public int discard() {
Object oldo = o;
o = null;
if (oldo != null)
return 1;
else
return 0;
}
}