// Path: src/main/java/io/aif/language/common/ISearchable.java
// public interface ISearchable<T, R> {
// 
//   public Optional<R> search(final T subject);
// 
// }
// 
// Path: src/main/java/io/aif/language/word/IWord.java
// public interface IWord {
// 
//   public String getRootToken();
// 
//   public Set<String> getAllTokens();
// 
//   public Long getCount();
// 
//   public int getTokenCount(String token);
// 
//   public static interface IWordPlaceholder {
// 
//     public IWord getWord();
// 
//     public String getToken();
// 
//   }
// 
// }


import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import io.aif.language.common.IDict;
import io.aif.language.common.ISearchable;
import io.aif.language.word.IWord;
package io.aif.language.word.dict;



class Dict implements IDict<IWord>, ISearchable<String, IWord> {

  private final Set<IWord> words;

  private final Map<String, IWord> reverseIndex;

// Path: src/main/java/io/aif/language/common/ISearchable.java
// public interface ISearchable<T, R> {
// 
//   public Optional<R> search(final T subject);
// 
// }
// 
// Path: src/main/java/io/aif/language/word/IWord.java
// public interface IWord {
// 
//   public String getRootToken();
// 
//   public Set<String> getAllTokens();
// 
//   public Long getCount();
// 
//   public int getTokenCount(String token);
// 
//   public static interface IWordPlaceholder {
// 
//     public IWord getWord();
// 
//     public String getToken();
// 
//   }
// 
// }


// Path: src/main/java/io/aif/language/word/dict/Dict.java
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import io.aif.language.common.IDict;
import io.aif.language.common.ISearchable;
import io.aif.language.word.IWord;

package io.aif.language.word.dict;



class Dict implements IDict<IWord>, ISearchable<String, IWord> {

  private final Set<IWord> words;

  private final Map<String, IWord> reverseIndex;

  private Dict(final Set<IWord> words, Map<String, IWord> reverseIndex) {