00001 00004 package cast.tests; 00005 00006 import cast.CASTException; 00007 import cast.architecture.ChangeFilterFactory; 00008 import cast.architecture.ManagedComponent; 00009 import cast.architecture.WorkingMemoryChangeReceiver; 00010 import cast.cdl.TestStructInt; 00011 import cast.cdl.WorkingMemoryChange; 00012 import cast.cdl.WorkingMemoryOperation; 00013 00022 public class DirectAccessReader extends ManagedComponent implements 00023 WorkingMemoryChangeReceiver { 00024 00025 private enum ReaderBehaviour { 00026 CHECK, ALTER 00027 }; 00028 00029 private ReaderBehaviour m_behaviour = ReaderBehaviour.CHECK; 00030 00031 @Override 00032 protected void start() { 00033 addChangeFilter(ChangeFilterFactory.createLocalTypeFilter( 00034 TestStructInt.class, WorkingMemoryOperation.ADD), this); 00035 } 00036 00037 public void workingMemoryChanged(WorkingMemoryChange _wmc) 00038 throws CASTException { 00039 TestStructInt tsi = getMemoryEntry(_wmc.address, TestStructInt.class); 00040 00041 if (m_behaviour == ReaderBehaviour.ALTER) { 00042 tsi.dummy++; 00043 } else if (m_behaviour == ReaderBehaviour.CHECK) { 00044 int startingValue = tsi.dummy; 00045 while (isRunning()) { 00046 tsi = getMemoryEntry(_wmc.address, TestStructInt.class); 00047 if (tsi.dummy != startingValue) { 00048 throw new RuntimeException("Value has changed"); 00049 } else { 00050 println("fine: " + tsi.dummy); 00051 } 00052 sleepComponent(1000); 00053 } 00054 00055 } 00056 } 00057 00058 }
1.5.8