001package com.hfg.bio.seq;
002
003import java.util.HashMap;
004import java.util.Map;
005import java.util.Set;
006
007import com.hfg.bio.AminoAcid;
008import com.hfg.exception.ProgrammingException;
009
010public class AminoAcidComposition
011{
012   private Map<AminoAcid, int[]> mMap = new HashMap<>(30);
013
014   //--------------------------------------------------------------------------
015   public void addAll(AminoAcidComposition inAAComposition)
016   {
017      for (Map.Entry<AminoAcid, int[]> entry : inAAComposition.mMap.entrySet())
018      {
019         increment(entry.getKey(), entry.getValue()[0]);
020      }
021   }
022
023   //--------------------------------------------------------------------------
024   public void increment(AminoAcid inAA)
025   {
026      increment(inAA, 1);
027   }
028
029   //--------------------------------------------------------------------------
030   public void increment(AminoAcid inAA, int inAmount)
031   {
032      int[] counter = mMap.computeIfAbsent(inAA, c -> new int[1]);
033      counter[0] += inAmount;
034   }
035
036   //--------------------------------------------------------------------------
037   public int get(AminoAcid inAA)
038   {
039      int[] counter = mMap.get(inAA);
040      return (null == counter ? 0 : counter[0]);
041   }
042
043   //--------------------------------------------------------------------------
044   public int size()
045   {
046      return mMap.size();
047   }
048
049   //--------------------------------------------------------------------------
050   public Set<AminoAcid> keySet()
051   {
052      return mMap.keySet();
053   }
054
055   //--------------------------------------------------------------------------
056   @Override
057   public AminoAcidComposition clone()
058   {
059      AminoAcidComposition cloneObj;
060      try
061      {
062         cloneObj = (AminoAcidComposition) super.clone();
063      }
064      catch (CloneNotSupportedException e)
065      {
066         throw new ProgrammingException(e);
067      }
068
069      cloneObj.mMap = new HashMap<>(mMap);
070
071      return cloneObj;
072   }
073}