All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.snapscript.core.function.index.FunctionIndexPartition Maven / Gradle / Ivy

package org.snapscript.core.function.index;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.snapscript.core.function.Function;
import org.snapscript.core.type.Type;

public class FunctionIndexPartition {

   private final Map groups;
   private final Set pointers;
   private final FunctionKeyBuilder builder;
   private final FunctionReducer matcher;
   
   public FunctionIndexPartition(FunctionReducer matcher, FunctionKeyBuilder builder) {
      this.groups = new HashMap();
      this.pointers = new HashSet();
      this.matcher = matcher;
      this.builder = builder;
   }
   
   public FunctionPointer resolve(String name, Type... list) throws Exception {
      FunctionIndexGroup group = groups.get(name);
      
      if(group != null) {
         return group.resolve(list);
      }
      return null;
   }
   
   public FunctionPointer resolve(String name, Object... list) throws Exception {
      FunctionIndexGroup group = groups.get(name);
      
      if(group != null) {
         return group.resolve(list);
      }
      return null;
   }
   
   public List resolve(int modifiers) {
      List matches = new ArrayList();
      
      for(FunctionPointer pointer : pointers){
         Function function = pointer.getFunction();
         int mask = function.getModifiers();
         
         if((modifiers & mask) == modifiers) {
            matches.add(pointer);
         }
      }
      return matches;
   }
   
   public void index(FunctionPointer pointer) throws Exception {
      Function function = pointer.getFunction();
      String name = function.getName();
      FunctionIndexGroup group = groups.get(name);
      
      if(group == null) {
         group = new FunctionIndexGroup(matcher, builder, name);
         groups.put(name, group);
      }
      pointers.add(pointer);
      group.index(pointer);
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy