aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/function/DigitalCircuitFunctions.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jcgp/backend/function/DigitalCircuitFunctions.java')
-rw-r--r--src/jcgp/backend/function/DigitalCircuitFunctions.java85
1 files changed, 80 insertions, 5 deletions
diff --git a/src/jcgp/backend/function/DigitalCircuitFunctions.java b/src/jcgp/backend/function/DigitalCircuitFunctions.java
index 31cdf17..0d4ae8e 100644
--- a/src/jcgp/backend/function/DigitalCircuitFunctions.java
+++ b/src/jcgp/backend/function/DigitalCircuitFunctions.java
@@ -1,10 +1,23 @@
package jcgp.backend.function;
+/**
+ * This class contains all digital circuit functions
+ * (defined as unsigned integer functions in the classic
+ * CGP implementation) defined in static nested classes.
+ * <br>
+ * This is the function set used by DigitalCircuitProblem.
+ *
+ * @see DigitalCircuiProblem
+ * @author Eduardo Pedroni
+ *
+ */
public class DigitalCircuitFunctions extends FunctionSet {
+ /**
+ * Creates a new instance of DigitalCircuitFunctions.
+ */
public DigitalCircuitFunctions() {
- name = "32-bit Logic";
- functionList = new Function[]{
+ registerFunctions(
new ConstantZero(),
new ConstantOne(),
new WireA(),
@@ -25,11 +38,12 @@ public class DigitalCircuitFunctions extends FunctionSet {
new Mux2(),
new Mux3(),
new Mux4()
- };
-
- enableAll();
+ );
}
+ /**
+ * Outputs a constant 0, has no inputs.
+ */
public static class ConstantZero extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -47,6 +61,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Outputs a constant 1, has no inputs.
+ */
public static class ConstantOne extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -64,6 +81,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Connects one node to another with no function.
+ */
public static class WireA extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -85,6 +105,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Connects one node to another with no function.
+ */
public static class WireB extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -106,6 +129,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Inverts input, equivalent to inverter logic gate.
+ */
public static class NotA extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -127,6 +153,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Inverts input, equivalent to inverter logic gate.
+ */
public static class NotB extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -148,6 +177,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * ANDs inputs together.
+ */
public static class And extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -173,6 +205,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * ANDs inputs together with one input inverted.
+ */
public static class AndNotA extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -198,6 +233,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * ANDs inputs together with one input inverted.
+ */
public static class AndNotB extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -223,6 +261,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * NORs inputs together.
+ */
public static class Nor extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -248,6 +289,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * XORs inputs together.
+ */
public static class Xor extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -273,6 +317,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * XNORs inputs together.
+ */
public static class Xnor extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -298,6 +345,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * ORs inputs together.
+ */
public static class Or extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -323,6 +373,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * ORs inputs together with one inverted input.
+ */
public static class OrNotA extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -348,6 +401,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * ORs inputs together with one inverted input.
+ */
public static class OrNotB extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -373,6 +429,9 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * NANDs inputs together.
+ */
public static class Nand extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -398,6 +457,10 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Works as a multiplexer. Outputs either one of its two inputs
+ * depending on a third input (select).
+ */
public static class Mux1 extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -424,6 +487,10 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Works as a multiplexer. Outputs either one of its two inputs
+ * depending on a third input (select). Input 0 is inverted.
+ */
public static class Mux2 extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -450,6 +517,10 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Works as a multiplexer. Outputs either one of its two inputs
+ * depending on a third input (select). Input 1 is inverted.
+ */
public static class Mux3 extends Function {
@Override
public UnsignedInteger run(Object... args) {
@@ -476,6 +547,10 @@ public class DigitalCircuitFunctions extends FunctionSet {
}
}
+ /**
+ * Works as a multiplexer. Outputs either one of its two inputs
+ * depending on a third input (select). Both inputs are inverted.
+ */
public static class Mux4 extends Function {
@Override
public UnsignedInteger run(Object... args) {