void local_storage_mixture::get_diff(features3_t& ret) const {
  ret.clear();
  for (pfi::data::unordered_map<string, id_feature_val3_t>::const_iterator it = tbl_diff_.begin(); it != tbl_diff_.end(); ++it){
    id_feature_val3_t::const_iterator it2 = it->second.begin();
    feature_val3_t fv3;
    for (; it2 != it->second.end(); ++it2){
      fv3.push_back(make_pair(class2id_.get_key(it2->first), it2->second));
    }
    ret.push_back(make_pair(it->first, fv3));
  }
}
void local_storage_mixture::set_average_and_clear_diff(const features3_t& average){
  for (features3_t::const_iterator it =  average.begin();
       it != average.end(); ++it){
    const feature_val3_t& avg = it->second;
    id_feature_val3_t& orig = tbl_[it->first];
    for (feature_val3_t::const_iterator it2 = avg.begin(); it2 != avg.end(); ++it2){
      val3_t& triple = orig[class2id_.get_id(it2->first)]; // may create
      increase(triple, it2->second);
    }
  }
  tbl_diff_.clear();
}
 void get_diff(features3_t& v) const {
   feature_val3_t c;
   c.push_back(make_pair(string("l1"), val3_t(1.0, 2.0, 3.0)));
   v.push_back(make_pair(string("f1"), c));
 }