1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  package com.github.maven_nar.cpptasks.types;
21  
22  import java.util.Vector;
23  
24  import org.apache.tools.ant.BuildException;
25  
26  import com.github.maven_nar.cpptasks.CUtil;
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  public class UndefineArgument {
37    
38  
39  
40  
41  
42  
43  
44  
45    public static UndefineArgument[] merge(final UndefineArgument[] base, final UndefineArgument[] override) {
46      if (base.length == 0) {
47        final UndefineArgument[] overrideClone = override.clone();
48        return overrideClone;
49      }
50      if (override.length == 0) {
51        final UndefineArgument[] baseClone = base.clone();
52        return baseClone;
53      }
54      final Vector<UndefineArgument> unduplicated = new Vector<>(base.length);
55      for (final UndefineArgument current : base) {
56        final String currentName = current.getName();
57        boolean match = false;
58        if (currentName == null) {
59          match = true;
60        } else {
61          for (final UndefineArgument over : override) {
62            final String overName = over.getName();
63            if (overName != null && overName.equals(currentName)) {
64              match = true;
65              break;
66            }
67          }
68        }
69        if (!match) {
70          unduplicated.addElement(current);
71        }
72      }
73      final UndefineArgument[] combined = new UndefineArgument[unduplicated.size() + override.length];
74      unduplicated.copyInto(combined);
75      final int offset = unduplicated.size();
76      System.arraycopy(override, 0, combined, offset + 0, override.length);
77      return combined;
78    }
79  
80    private boolean define = false;
81    private String ifCond;
82    private String name;
83    private String unlessCond;
84  
85    public UndefineArgument() {
86    }
87  
88    protected UndefineArgument(final boolean isDefine) {
89      this.define = isDefine;
90    }
91  
92    public void execute() throws org.apache.tools.ant.BuildException {
93      throw new org.apache.tools.ant.BuildException("Not an actual task, but looks like one for documentation purposes");
94    }
95  
96    
97    public final String getName() {
98      return this.name;
99    }
100 
101   
102   public String getValue() {
103     return null;
104   }
105 
106   
107 
108 
109 
110 
111 
112 
113   public final boolean isActive(final org.apache.tools.ant.Project p) throws BuildException {
114     if (this.name == null) {
115       throw new BuildException("<define> is missing name attribute");
116     }
117     return CUtil.isActive(p, this.ifCond, this.unlessCond);
118   }
119 
120   
121   public final boolean isDefine() {
122     return this.define;
123   }
124 
125   
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137   public final void setIf(final String propName) {
138     this.ifCond = propName;
139   }
140 
141   
142   public final void setName(final String name) {
143     this.name = name;
144   }
145 
146   
147 
148 
149 
150 
151 
152 
153 
154 
155 
156 
157 
158   public final void setUnless(final String propName) {
159     this.unlessCond = propName;
160   }
161 }