Merge pull request #728 from jmcastagnetto/master
Implements Xor operation
This commit is contained in:
commit
2c2c0d3d68
1
.gitignore
vendored
1
.gitignore
vendored
@ -18,4 +18,5 @@ broker/core/module/MOD-INF/classes/
|
||||
broker/core/WEB-INF/lib/
|
||||
broker/core/data/
|
||||
broker/core/test-output/
|
||||
tmp/
|
||||
/test-output
|
||||
|
@ -0,0 +1,65 @@
|
||||
/*
|
||||
Copyright (c) 2013, Jesus M. Castagnetto
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
- Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package com.google.refine.expr.functions.booleans;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
|
||||
import com.google.refine.expr.EvalError;
|
||||
import com.google.refine.grel.ControlFunctionRegistry;
|
||||
import com.google.refine.grel.Function;
|
||||
|
||||
public class Xor implements Function {
|
||||
|
||||
/* naive implementation of the XOR operation */
|
||||
@Override
|
||||
public Object call(Properties bindings, Object[] args) {
|
||||
if (args.length == 2 &&
|
||||
args[0] != null && args[0] instanceof Boolean &&
|
||||
args[1] != null && args[1] instanceof Boolean) {
|
||||
boolean o1 = ((Boolean) args[0]).booleanValue();
|
||||
boolean o2 = ((Boolean) args[1]).booleanValue();
|
||||
return o1 != o2;
|
||||
}
|
||||
return new EvalError(ControlFunctionRegistry.getFunctionName(this) + " expects 2 booleans");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(JSONWriter writer, Properties options)
|
||||
throws JSONException {
|
||||
|
||||
writer.object();
|
||||
writer.key("description");
|
||||
writer.value("XORs two boolean values");
|
||||
writer.key("params");
|
||||
writer.value("boolean a, boolean b");
|
||||
writer.key("returns");
|
||||
writer.value("boolean");
|
||||
writer.endObject();
|
||||
}
|
||||
}
|
@ -56,6 +56,7 @@ import com.google.refine.expr.functions.arrays.Uniques;
|
||||
import com.google.refine.expr.functions.booleans.And;
|
||||
import com.google.refine.expr.functions.booleans.Not;
|
||||
import com.google.refine.expr.functions.booleans.Or;
|
||||
import com.google.refine.expr.functions.booleans.Xor;
|
||||
import com.google.refine.expr.functions.date.DatePart;
|
||||
import com.google.refine.expr.functions.date.Inc;
|
||||
import com.google.refine.expr.functions.date.Now;
|
||||
@ -284,6 +285,7 @@ public class ControlFunctionRegistry {
|
||||
registerFunction("and", new And());
|
||||
registerFunction("or", new Or());
|
||||
registerFunction("not", new Not());
|
||||
registerFunction("xor", new Xor());
|
||||
|
||||
registerFunction("cross", new Cross());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user