* @param value value for addition.
* @return added index.
*/
- pulic int add(T value){
+ public int add(T value){
int index = -1;
for(int i = 0; i < values.length; i++){
if(values[i] == null){
public int hashCode(){
return Arrays.hashCode(values);
}
-
- @SuppressWarnings("unchecked")
- public static <T> KGram<T>[] buildKGram(T[] values, int kvalue){
- Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();
-
- if(values.length >= kvalue){
- int max = values.length - (kvalue - 1);
- for(int i = 0; i < max; i++){
- KGram<T> kgram = new KGram<T>(kvalue);
- for(int j = 0; j < kvalue; j++){
- kgram.set(j, values[i + j]);
- }
- kgrams.add(kgram);
- }
- }
- return kgrams.toArray(new KGram[kgrams.size()]);
- }
}
}
public void visitEnd(){
- Set<KGram<Integer>> kgrams = new HashSet<KGram<Integer>>();
- if(opcodes.size() >= getKValue()){
- int kvalue = getKValue();
- int max = opcodes.size() - (kvalue - 1);
- for(int i = 0; i < max; i++){
- KGram<Integer> kgram = new KGram<Integer>(kvalue);
- for(int j = 0; j < kvalue; j++){
- kgram.set(j, opcodes.get(i + j));
- }
- kgrams.add(kgram);
- }
- }
+ KGramBuilder builder = KGramBuilder.getInstance();
+ KGram<Integer>[] kgrams = builder.<Integer>buildKGram(opcodes, getKValue());
+
for(KGram<Integer> kgram: kgrams){
addElement(new KGramBasedBirthmarkElement<Integer>(kgram));
}
--- /dev/null
+package jp.sourceforge.stigmata.birthmarks.kgram;\r
+\r
+/*\r
+ * $Id$\r
+ */\r
+\r
+import java.util.LinkedHashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+/**\r
+ * @author Haruaki Tamada\r
+ * @version $Revision$\r
+ */\r
+public class KGramBuilder{\r
+ private static final KGramBuilder builder = new KGramBuilder();\r
+\r
+ /**\r
+ * private constructor for singleton pattern.\r
+ */\r
+ private KGramBuilder(){\r
+ }\r
+\r
+ public static KGramBuilder getInstance(){\r
+ return builder;\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public <T> KGram<T>[] buildKGram(T[] values, int kvalue){\r
+ Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();\r
+\r
+ if(values.length >= kvalue){\r
+ int max = values.length - (kvalue - 1);\r
+ for(int i = 0; i < max; i++){\r
+ KGram<T> kgram = new KGram<T>(kvalue);\r
+ for(int j = 0; j < kvalue; j++){\r
+ kgram.set(j, values[i + j]);\r
+ }\r
+ kgrams.add(kgram);\r
+ }\r
+ }\r
+ return kgrams.toArray(new KGram[kgrams.size()]);\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public <T> KGram<T>[] buildKGram(List<T> values, int kvalue){\r
+ Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();\r
+\r
+ if(values.size() >= kvalue){\r
+ int max = values.size() - (kvalue - 1);\r
+ for(int i = 0; i < max; i++){\r
+ KGram<T> kgram = new KGram<T>(kvalue);\r
+ for(int j = 0; j < kvalue; j++){\r
+ kgram.set(j, values.get(i + j));\r
+ }\r
+ kgrams.add(kgram);\r
+ }\r
+ }\r
+ return kgrams.toArray(new KGram[kgrams.size()]);\r
+ }\r
+}
\ No newline at end of file
public static class StringHandler implements ResultSetHandler{
private int index;
-
+
public StringHandler(){
this(0);
}
-
+
public StringHandler(int index){
this.index = index;
}
-
+
public Object handle(ResultSet rs) throws SQLException{
List<String> list = new ArrayList<String>();
while(rs.next()){
map.put(url, bs);
}
String type = rs.getString("TYPE");
-
+
Birthmark birthmark = bs.getBirthmark(type);
if(birthmark == null){
birthmark = env.getService(type).buildBirthmark();