samer@0
|
1 /*
|
samer@0
|
2 * Copyright (c) 2000, Samer Abdallah, King's College London.
|
samer@0
|
3 * All rights reserved.
|
samer@0
|
4 *
|
samer@0
|
5 * This software is provided AS iS and WITHOUT ANY WARRANTY;
|
samer@0
|
6 * without even the implied warranty of MERCHANTABILITY or
|
samer@0
|
7 * FITNESS FOR A PARTICULAR PURPOSE.
|
samer@0
|
8 */
|
samer@0
|
9
|
samer@0
|
10 package samer.maths;
|
samer@0
|
11 import samer.core.*;
|
samer@0
|
12 import samer.core.types.*;
|
samer@0
|
13 import samer.core.util.*;
|
samer@0
|
14 import java.awt.*;
|
samer@0
|
15 import java.util.*;
|
samer@0
|
16
|
samer@0
|
17 /**
|
samer@0
|
18 A Viewable random number generator.
|
samer@0
|
19 The Generator itself must expose any parameters
|
samer@0
|
20 it has, but this object allows the user to
|
samer@0
|
21 control what class of generator to use.
|
samer@0
|
22 */
|
samer@0
|
23
|
samer@0
|
24 public class VGenerator extends Viewable implements Agent, Generator
|
samer@0
|
25 {
|
samer@0
|
26 Generator gen;
|
samer@0
|
27 String desc; // description of the current generator
|
samer@0
|
28
|
samer@0
|
29 public VGenerator(String nm) throws Exception { this(nm,new Zero()); }
|
samer@0
|
30 public VGenerator(String nm, Generator g) throws Exception {
|
samer@0
|
31 super(nm); setAgent(this); gen = g;
|
samer@0
|
32 Shell.registerViewable(this);
|
samer@0
|
33 }
|
samer@0
|
34
|
samer@0
|
35 public double next() { return gen.next(); }
|
samer@0
|
36 public void next(double[] x) { gen.next(x); }
|
samer@0
|
37
|
samer@0
|
38 public void dispose()
|
samer@0
|
39 {
|
samer@0
|
40 Shell.deregisterViewable(this);
|
samer@0
|
41 gen.dispose();
|
samer@0
|
42 super.dispose();
|
samer@0
|
43 }
|
samer@0
|
44
|
samer@0
|
45 public Generator getGenerator() { return gen; }
|
samer@0
|
46 public void setGenerator(Generator g) {
|
samer@0
|
47 gen.dispose(); gen=g; changed();
|
samer@0
|
48 }
|
samer@0
|
49
|
samer@0
|
50 public Viewer getViewer() { return new UI(); }
|
samer@0
|
51
|
samer@0
|
52 private class UI extends BaseViewer {
|
samer@0
|
53 UI() {
|
samer@0
|
54 super(VGenerator.this);
|
samer@0
|
55 update(VGenerator.this,null);
|
samer@0
|
56 }
|
samer@0
|
57
|
samer@0
|
58 public void update(Observable o, Object arg) {
|
samer@0
|
59 super.update(o,arg);
|
samer@0
|
60 Shell.trace("VGenerator update to "+gen.toString());
|
samer@0
|
61 setText(getLabel()+": "+gen.toString());
|
samer@0
|
62 }
|
samer@0
|
63 }
|
samer@0
|
64
|
samer@0
|
65 public void getCommands(Registry r) { r.add("set").add("next"); }
|
samer@0
|
66
|
samer@0
|
67 public void execute(String cmd, Environment env) throws Exception
|
samer@0
|
68 {
|
samer@0
|
69 if (cmd.equals("set")) {
|
samer@0
|
70 Shell.push(getNode());
|
samer@0
|
71 setGenerator((Generator)X.object(env.datum()));
|
samer@0
|
72 Shell.pop();
|
samer@0
|
73 } else if (cmd.equals("next")) {
|
samer@0
|
74 env.add(new Double(gen.next()));
|
samer@0
|
75 }
|
samer@0
|
76 }
|
samer@0
|
77 }
|
samer@0
|
78
|