Ignore:
Timestamp:
Dec 25, 2007, 11:23:04 AM (14 years ago)
Author:
Peter Johansson
Message:

fixes #280 - keep on refactoring of Stats class

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/ClassicStats.cc

    r519 r528  
    5555  }
    5656
    57 
     57  ClassicStats::ClassicStats(const ClassicStats& other)
     58  : Stats(other)
     59  {
     60  }
     61
     62  /*
    5863  std::vector<u_int> ClassicStats::accumulated(const Map_& map) const
    5964  {
     
    8590    return accum;
    8691  }
     92  */
     93
    8794
    8895  void ClassicStats::add(const std::string& user, const u_int& rev,
     
    128135      ++(*comments)[rev];
    129136
    130     std::vector<u_int>* empty = &(empty_[user]);
    131     assert(empty);
    132     if (empty->size() < rev+1){
    133       empty->reserve(revision() + 1);
    134       empty->insert(empty->end(), rev - empty->size(), 0);
    135       if (lt == Parser::empty)
    136         empty->push_back(1);
     137    std::vector<u_int>* other = &(other_[user]);
     138    assert(other);
     139    if (other->size() < rev+1){
     140      other->reserve(revision() + 1);
     141      other->insert(other->end(), rev - other->size(), 0);
     142      if (lt == Parser::other)
     143        other->push_back(1);
    137144      else
    138         empty->push_back(0);
     145        other->push_back(0);
    139146    }
    140     else if (lt == Parser::empty)
    141       ++(*empty)[rev];
     147    else if (lt == Parser::other)
     148      ++(*other)[rev];
    142149  }
    143150
     
    172179    getline(is, str);
    173180    getline(is, str);
    174     if (str!=empty_cache()){
     181    if (str!=other_cache()){
    175182      return false;
    176183    }
    177     load(is, empty_);
     184    load(is, other_);
    178185    getline(is, str);
    179186    getline(is, str);
     
    188195
    189196
    190   void ClassicStats::load(std::istream& is, Map_& m)
     197  void ClassicStats::load(std::istream& is, Author2Vector& m)
    191198  {
    192199    while (m.size() < authors().size() && is.good()) {
     
    226233    plot_init(filename);
    227234    GnuplotFE* gp=GnuplotFE::instance();
    228     const Map_* stat=NULL;
     235    const Author2Vector* stat=NULL;
    229236    if (linetype=="total")
    230237      stat = &total_;
     
    234241      stat = &comments_;
    235242    else if (linetype=="empty")
    236       stat = &empty_;
     243      stat = &other_;
    237244    assert(stat);
    238     std::vector<u_int> total=accumulated(*stat);   
     245    assert(stat->size());
     246    std::vector<u_int> total=get_vector(*stat, "all");   
    239247    double yrange_max=1.03*total.back()+1;
    240248    gp->yrange(yrange_max);
     
    243251    vec_type author_cont;
    244252    author_cont.reserve(stat->size());
    245     for (MapConstIter_ i= stat->begin(); i != stat->end(); ++i) {
     253    for (A2VConstIter i= stat->begin(); i != stat->end(); ++i) {
    246254      author_cont.push_back(std::make_pair(i->first,
    247                                            accumulated(*stat,i->first)));
     255                                           get_vector(*stat,i->first)));
    248256    }
    249257
     
    294302    os << "\n" << comments_cache() << "\n";
    295303    do_print(os, comments_);
    296     os << "\n" << empty_cache() << "\n";
    297     do_print(os, empty_);
     304    os << "\n" << other_cache() << "\n";
     305    do_print(os, other_);
    298306    os << "\n" << total_cache() << "\n";
    299307    do_print(os, total_);
     
    302310
    303311
    304   void ClassicStats::do_print(std::ostream& os, const Map_& m) const
    305   {
    306     for (MapConstIter_ i(m.begin()); i!=m.end(); ++i){
     312  void ClassicStats::do_print(std::ostream& os, const Author2Vector& m) const
     313  {
     314    for (A2VConstIter i(m.begin()); i!=m.end(); ++i){
    307315      os << i->first << "\n";
    308316      os << i->second.size() << " ";
     
    313321
    314322 
    315   std::vector<u_int> ClassicStats::vector(std::string type,
    316                                           std::string user) const
    317   {
    318     const Map_* map = NULL;
    319     if (type=="code")
    320       map = &code_;
    321     else if (type=="comments")
    322       map = &comments_;
    323     else if (type=="other")
    324       map = &empty_;
    325     assert(map && "type is of invalid type");
    326     if (!map->count(user))
    327       return std::vector<u_int>(last_changed_rev(),0);
    328     const std::vector<u_int>& vec=(map->find(user))->second;
    329    
    330     std::vector<u_int> accum(vec.size());
    331     std::partial_sum(vec.begin(),vec.end(),accum.begin());
    332     // static_cast to remove annoying compiler warning
    333     if (accum.size() < static_cast<size_t>(revision()+1))
    334       accum.insert(accum.end(), revision()+1-vec.size(), accum.back());
    335     return accum;
    336 
    337   }
    338 
    339 
    340   ClassicStats& ClassicStats::operator+=(const ClassicStats& rhs)
    341   {
    342     base_add(rhs.code_.begin(), rhs.code_.end(), code_);
    343     base_add(rhs.comments_.begin(), rhs.comments_.end(), comments_);
    344     base_add(rhs.empty_.begin(), rhs.empty_.end(), empty_);
    345     base_add(rhs.total_.begin(), rhs.total_.end(), total_);
    346    
    347     base_add(rhs);
    348     return *this;
    349   }
    350 
    351323}} // end of namespace svndigest and namespace theplu
Note: See TracChangeset for help on using the changeset viewer.