aboutsummaryrefslogtreecommitdiffstats
path: root/src/jcgp/backend/function/BitwiseLogic.java
diff options
context:
space:
mode:
authorEduardo Pedroni <ep625@york.ac.uk>2014-04-18 09:08:41 +0100
committerEduardo Pedroni <ep625@york.ac.uk>2014-04-18 09:08:41 +0100
commit88314e71f908efcfc38da3b800319c171a6ccceb (patch)
treedf42e3af2652dff815d1269bb81906a7af51e089 /src/jcgp/backend/function/BitwiseLogic.java
parente7d7e8506a511d78f9e323ac09587f79ad503f42 (diff)
Added parsers, did a bit of testing, switched to java8
Diffstat (limited to 'src/jcgp/backend/function/BitwiseLogic.java')
-rw-r--r--src/jcgp/backend/function/BitwiseLogic.java337
1 files changed, 269 insertions, 68 deletions
diff --git a/src/jcgp/backend/function/BitwiseLogic.java b/src/jcgp/backend/function/BitwiseLogic.java
index 5d47ff7..14f4488 100644
--- a/src/jcgp/backend/function/BitwiseLogic.java
+++ b/src/jcgp/backend/function/BitwiseLogic.java
@@ -1,6 +1,5 @@
package jcgp.backend.function;
-import jcgp.backend.exceptions.InvalidArgumentsException;
import jcgp.backend.population.Connection;
public class BitwiseLogic extends FunctionSet {
@@ -8,26 +7,155 @@ public class BitwiseLogic extends FunctionSet {
public BitwiseLogic() {
name = "32-bit Logic";
functionList = new Function[]{
+ new ConstantZero(),
+ new ConstantOne(),
+ new WireA(),
+ new WireB(),
+ new NotA(),
+ new NotB(),
new And(),
- new Or(),
- new Not(),
- new Xor(),
- new Nand(),
+ new AndNotA(),
+ new AndNotB(),
new Nor(),
- new Xnor()};
+ new Xor(),
+ new Xnor(),
+ new Or(),
+ new OrNotA(),
+ new OrNotB(),
+ new Nand()};
+
+ // TODO muxes
enableAll();
}
+
+ public static class ConstantZero extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ return new Long(0);
+ }
+
+ @Override
+ public int getArity() {
+ return 0;
+ }
+
+ @Override
+ public String getName() {
+ return "0";
+ }
+ }
+
+ public static class ConstantOne extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ return new Long(Long.MAX_VALUE);
+ }
+
+ @Override
+ public int getArity() {
+ return 0;
+ }
+
+ @Override
+ public String getName() {
+ return "1";
+ }
+ }
+
+ public static class WireA extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
+ } else {
+ return ((Long) connections[0].getValue()).longValue();
+ }
+ }
+
+ @Override
+ public int getArity() {
+ return 2;
+ }
+
+ @Override
+ public String getName() {
+ return "Wire A";
+ }
+ }
+
+ public static class WireB extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
+ } else {
+ return ((Long) connections[1].getValue()).longValue();
+ }
+ }
+
+ @Override
+ public int getArity() {
+ return 2;
+ }
+
+ @Override
+ public String getName() {
+ return "Wire B";
+ }
+ }
+
+ public static class NotA extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
+ } else {
+ return ~((Long) connections[0].getValue()).longValue();
+ }
+ }
+
+ @Override
+ public int getArity() {
+ return 2;
+ }
+
+ @Override
+ public String getName() {
+ return "Not A";
+ }
+ }
+
+ public static class NotB extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
+ } else {
+ return ~((Long) connections[1].getValue()).longValue();
+ }
+ }
+
+ @Override
+ public int getArity() {
+ return 2;
+ }
+ @Override
+ public String getName() {
+ return "Not B";
+ }
+ }
+
public static class And extends Function {
@Override
- public Object run(Connection... connections) {
- if (connections.length < 2) {
- throw new InvalidArgumentsException("Not enough connections were given.");
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
} else {
- int arg1 = ((int) connections[0].getValue());
- int arg2 = ((int) connections[1].getValue());
- int result = arg1 & arg2;
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = arg1 & arg2;
return result;
}
@@ -40,20 +168,20 @@ public class BitwiseLogic extends FunctionSet {
@Override
public String getName() {
- return "AND";
+ return "And";
}
}
- public static class Or extends Function {
+ public static class AndNotA extends Function {
@Override
- public Object run(Connection... connections) {
- if (connections.length < 2) {
- throw new InvalidArgumentsException("Not enough connections were given.");
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
} else {
- int arg1 = ((int) connections[0].getValue());
- int arg2 = ((int) connections[1].getValue());
- int result = arg1 | arg2;
-
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = ~arg1 & arg2;
+
return result;
}
}
@@ -65,43 +193,69 @@ public class BitwiseLogic extends FunctionSet {
@Override
public String getName() {
- return "OR";
+ return "And !A";
}
}
-
- public static class Not extends Function {
+
+ public static class AndNotB extends Function {
@Override
- public Object run(Connection... connections) {
- if (connections.length < 1) {
- throw new InvalidArgumentsException("Not enough connections were given.");
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
} else {
- int arg1 = ((int) connections[0].getValue());
- int result = ~arg1;
-
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = arg1 & ~arg2;
+
return result;
}
}
@Override
public int getArity() {
- return 1;
+ return 2;
}
@Override
public String getName() {
- return "NOT";
+ return "And !B";
}
}
+
+ public static class Nor extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
+ } else {
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = arg1 | arg2;
+ return ~result;
+ }
+ }
+
+ @Override
+ public int getArity() {
+ return 2;
+ }
+
+ @Override
+ public String getName() {
+ return "Nor";
+ }
+ }
+
public static class Xor extends Function {
@Override
- public Object run(Connection... connections) {
- if (connections.length < 2) {
- throw new InvalidArgumentsException("Not enough connections were given.");
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
} else {
- int arg1 = ((int) connections[0].getValue());
- int arg2 = ((int) connections[1].getValue());
- int result = arg1 ^ arg2;
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = arg1 ^ arg2;
return result;
}
@@ -114,19 +268,19 @@ public class BitwiseLogic extends FunctionSet {
@Override
public String getName() {
- return "XOR";
+ return "Xor";
}
}
-
- public static class Nand extends Function {
+
+ public static class Xnor extends Function {
@Override
- public Object run(Connection... connections) {
- if (connections.length < 2) {
- throw new InvalidArgumentsException("Not enough connections were given.");
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
} else {
- int arg1 = ((int) connections[0].getValue());
- int arg2 = ((int) connections[1].getValue());
- int result = arg1 & arg2;
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = arg1 ^ arg2;
return ~result;
}
@@ -139,21 +293,71 @@ public class BitwiseLogic extends FunctionSet {
@Override
public String getName() {
- return "NAND";
+ return "Xnor";
}
}
+
+ public static class Or extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
+ } else {
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = arg1 | arg2;
- public static class Nor extends Function {
+ return result;
+ }
+ }
+
+ @Override
+ public int getArity() {
+ return 2;
+ }
+
+ @Override
+ public String getName() {
+ return "Or";
+ }
+ }
+
+ public static class OrNotA extends Function {
@Override
- public Object run(Connection... connections) {
- if (connections.length < 2) {
- throw new InvalidArgumentsException("Not enough connections were given.");
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
} else {
- int arg1 = ((int) connections[0].getValue());
- int arg2 = ((int) connections[1].getValue());
- int result = arg1 | arg2;
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = ~arg1 | arg2;
- return ~result;
+ return result;
+ }
+ }
+
+ @Override
+ public int getArity() {
+ return 2;
+ }
+
+ @Override
+ public String getName() {
+ return "Or !A";
+ }
+ }
+
+ public static class OrNotB extends Function {
+ @Override
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
+ } else {
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = arg1 | ~arg2;
+
+ return result;
}
}
@@ -164,19 +368,19 @@ public class BitwiseLogic extends FunctionSet {
@Override
public String getName() {
- return "NOR";
+ return "Or !B";
}
}
- public static class Xnor extends Function {
+ public static class Nand extends Function {
@Override
- public Object run(Connection... connections) {
- if (connections.length < 2) {
- throw new InvalidArgumentsException("Not enough connections were given.");
+ public Long run(Connection... connections) {
+ if (connections.length < getArity()) {
+ throw new IllegalArgumentException(getName() + " received " + connections.length + " connections but arity is " + getArity() + ".");
} else {
- int arg1 = ((int) connections[0].getValue());
- int arg2 = ((int) connections[1].getValue());
- int result = arg1 ^ arg2;
+ Long arg1 = ((Long) connections[0].getValue());
+ Long arg2 = ((Long) connections[1].getValue());
+ Long result = arg1 & arg2;
return ~result;
}
@@ -189,10 +393,7 @@ public class BitwiseLogic extends FunctionSet {
@Override
public String getName() {
- return "XNOR";
+ return "Nand";
}
}
-
-
-
}