From 254c4886d58979eebd0e352f4d16e391736f2a33 Mon Sep 17 00:00:00 2001 From: Mark Donszelmann Date: Thu, 5 Nov 2009 23:27:33 +0100 Subject: Reorganized source directories in line with cpptasks-1.0b5, for easier tracking --- .../cpptasks/types/UndefineArgument.java | 153 +++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 src/main/java/net/sf/antcontrib/cpptasks/types/UndefineArgument.java (limited to 'src/main/java/net/sf/antcontrib/cpptasks/types/UndefineArgument.java') diff --git a/src/main/java/net/sf/antcontrib/cpptasks/types/UndefineArgument.java b/src/main/java/net/sf/antcontrib/cpptasks/types/UndefineArgument.java new file mode 100644 index 0000000..aa958ef --- /dev/null +++ b/src/main/java/net/sf/antcontrib/cpptasks/types/UndefineArgument.java @@ -0,0 +1,153 @@ +/* + * + * Copyright 2001-2004 The Ant-Contrib project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package net.sf.antcontrib.cpptasks.types; +import java.util.Vector; + +import net.sf.antcontrib.cpptasks.CUtil; + +import org.apache.tools.ant.BuildException; +/** + * Preprocessor macro undefinition. + * + * @author Mark A Russell mark_russell@csg_systems.com + * + */ +public class UndefineArgument { + /** + * This method returns an array of UndefineArgument and DefineArgument's by + * merging a base list with an override list. + * + * Any define in the base list with a name that appears in the override + * list is suppressed. All entries in the override list are preserved + * + */ + public static UndefineArgument[] merge(UndefineArgument[] base, + UndefineArgument[] override) { + if (base.length == 0) { + UndefineArgument[] overrideClone = (UndefineArgument[]) override + .clone(); + return overrideClone; + } + if (override.length == 0) { + UndefineArgument[] baseClone = (UndefineArgument[]) base.clone(); + return baseClone; + } + Vector unduplicated = new Vector(base.length); + for (int i = 0; i < base.length; i++) { + UndefineArgument current = base[i]; + String currentName = current.getName(); + boolean match = false; + if (currentName == null) { + match = true; + } else { + for (int j = 0; j < override.length; j++) { + UndefineArgument over = override[j]; + String overName = over.getName(); + if (overName != null && overName.equals(currentName)) { + match = true; + break; + } + } + } + if (!match) { + unduplicated.addElement(current); + } + } + UndefineArgument[] combined = new UndefineArgument[unduplicated.size() + + override.length]; + unduplicated.copyInto(combined); + int offset = unduplicated.size(); + for (int i = 0; i < override.length; i++) { + combined[offset + i] = override[i]; + } + return combined; + } + private boolean define = false; + private String ifCond; + private String name; + private String unlessCond; + public UndefineArgument() { + } + protected UndefineArgument(boolean isDefine) { + this.define = isDefine; + } + public void execute() throws org.apache.tools.ant.BuildException { + throw new org.apache.tools.ant.BuildException( + "Not an actual task, but looks like one for documentation purposes"); + } + /** Returns the name of the define */ + public final String getName() { + return name; + } + /** Returns the value of the define */ + public String getValue() { + return null; + } + /** + * Returns true if the define's if and unless conditions (if any) are + * satisfied. + * + * @exception BuildException + * throws build exception if name is not set + */ + public final boolean isActive(org.apache.tools.ant.Project p) + throws BuildException { + if (name == null) { + throw new BuildException(" is missing name attribute"); + } + return CUtil.isActive(p, ifCond, unlessCond); + } + /** Returns true if this is a define, false if an undefine. */ + public final boolean isDefine() { + return define; + } + /** + * Sets the property name for the 'if' condition. + * + * The define will be ignored unless the property is defined. + * + * The value of the property is insignificant, but values that would imply + * misinterpretation ("false", "no") will throw an exception when + * evaluated. + * + * @param propName + * property name + */ + public final void setIf(String propName) { + ifCond = propName; + } + /** Set the name attribute */ + public final void setName(String name) { + this.name = name; + } + /** + * Set the property name for the 'unless' condition. + * + * If named property is set, the define will be ignored. + * + * The value of the property is insignificant, but values that would imply + * misinterpretation ("false", "no") of the behavior will throw an + * exception when evaluated. + * + * @param propName + * name of property + */ + public final void setUnless(String propName) { + unlessCond = propName; + } +} -- cgit v1.2.3