content: package com.alipay.bluewhale.core.stats.method;
  
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  import java.util.Map.Entry;
  
  
  public class StatFunction {
      public static void incr_val(Map<Object, Long> map, Object key, long amt) {
  	long value = 0l;
  	if (map.containsKey(key)) {
  	    value = map.get(key);
  	}
  	value += amt;
  	map.put(key, value);
      }
  
      public static void incr_val(Map<Object, Long> map, Object key) {
  	incr_val(map, key, 1);
      }
  
      public static synchronized Pair update_avg(Pair curr, long val) {
  	curr.first += val;
  	curr.second++;
  	return curr;
      }
  
      public static Pair merge_avg(List<Pair> avg) {
  	Pair rtn = new Pair();
  	for (Pair p : avg) {
  	    rtn.first += p.first;
  	    rtn.second += p.second;
  	}
  	return rtn;
      }
  
      public static double extract_avg(Pair p) {
  	if(p.second==0)
  	{
  	    return 0d;
  	}
  	return (p.first * 1.0) / p.second;
      }
  
      public static void update_keyed_avg(Map<Object, Pair> map, Object key,long val) {
  	Pair p = map.get(key);
  	if (p == null) {
  	    p = new Pair();
  	}
  	update_avg(p, val);
  	map.put(key, p);
      }
  
      public static Pair merge_keyed_avg(List<Pair> avg) {
  	return merge_avg(avg);
      }
  
      public static Map<Object, Double> extract_key_avg(Map<Object, Pair> map) {
  	Map<Object, Double> rtn = new HashMap<Object, Double>();
  	if(map!=null)
  	{
          	for (Entry<Object, Pair> e : map.entrySet()) {
          	    rtn.put(e.getKey(), extract_avg(e.getValue()));
          	}
  	}
  	return rtn;
      }
  
      public static Map<Object, Long> counter_extract(Map<Object, Long> v) {
  	if (v == null) {
  	    return new HashMap<Object, Long>();
  	}
  	return v;
      }
  
  }
  