Changeset 636 for trunk


Ignore:
Timestamp:
May 24, 2008, 2:03:42 AM (13 years ago)
Author:
Peter Johansson
Message:

correction of previous commit

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Stats.cc

    r611 r636  
    6868  {
    6969    if (vec.empty()){
    70       vec.resize(last_changed_rev(),0);
    71       return;
    72     }
    73     std::partial_sum(vec.begin(),vec.end(),vec.begin());
     70      // just to allow call to vec.back() below
     71      vec.resize(1,0);
     72    }
     73    else
     74      std::partial_sum(vec.begin(),vec.end(),vec.begin());
    7475    // static_cast to remove annoying compiler warning
    7576    if (vec.size() < static_cast<size_t>(revision()+1))
    76       vec.insert(vec.end(), revision()+1-vec.size(), vec.back());
     77      vec.resize(revision()+1, vec.back());
    7778  }
    7879
     
    113114      vec.reserve(rev+1);
    114115      vec.resize(rev);
    115       if (x)
     116      if (x) {
     117        assert(vec.size()+1<vec.max_size());
    116118        vec.push_back(n);
    117       else
     119      }
     120      else {
     121        assert(vec.size()+1<vec.max_size());
    118122        vec.push_back(0);
     123      }
    119124    }
    120125    else if (x)
     
    251256      std::string name;
    252257      std::getline(is, name);
    253       if (name.empty())
    254         continue;
    255258      std::vector<unsigned int>& vec=m[name];
    256       svn_revnum_t rev=0;
    257       while (rev < last_changed_rev() && is.good()) {
    258         unsigned int count;
    259         is >> count;
    260         if ( rev+1 > static_cast<svn_revnum_t>(vec.size()) )
     259      std::string line;
     260      std::getline(is, line);
     261      std::stringstream ss(line);
     262      while (ss.good()) {
     263        svn_revnum_t rev=0;
     264        unsigned int count=0;
     265        ss >> rev;
     266        ss >> count;
     267        if (!count)
     268          break;
     269        if (rev+1 < static_cast<svn_revnum_t>(vec.size()) )
    261270          vec.resize(rev+1);
    262         vec[rev] = count;
    263         is >> rev;
    264       }
     271        vec[rev]=count;
     272      }
     273      accumulate(vec);
    265274    }
    266275  }
     
    462471    os << cache_check_str() << "\n";
    463472    os << last_changed_rev() << " ";
    464     os << authors().size() << " ";
     473    os << authors().size() << "\n";
    465474
    466475    std::copy(authors().begin(), authors().end(),
     
    478487    for (A2VConstIter i(m.begin()); i!=m.end(); ++i){
    479488      os << i->first << "\n";
    480       os << i->second.front() << " ";
    481       for (size_t j=1; j<i->second.size(); ++j)
    482         if (i->second[j] != i->second[j-1])
     489      assert(i->second.size());
     490      if (i->second[0])
     491        os << 0 << " " << i->second[0] << " ";
     492      for (size_t j=1; j<i->second.size(); ++j) {
     493        // only print if stats changes in this rev
     494        if (i->second[j] != i->second[j-1]) {
    483495          os << j << " " << i->second[j] - i->second[j-1] << " ";
    484       os << last_changed_rev()+1 << " ";
     496        }
     497      }
     498      os << "\n";
    485499    }
    486500  }
     
    490504    for (size_t i=0; i<stats_.size(); ++i){
    491505      stats_[i].clear();
    492       std::vector<unsigned int> vec;
    493       stats_[i]["all"] = vec;
    494506    }
    495507    authors_.clear();
     
    513525  {
    514526    assert(linetype<=LineTypeParser::total);
     527    assert(static_cast<size_t>(linetype) < stats_.size());
    515528    A2VConstIter i = stats_[linetype].find(author);
    516529    if (i==stats_[linetype].end())
    517530      throw std::runtime_error(author + " does not exist");
     531    assert(rev < i->second.size());
    518532    return i->second[rev];
    519533  }
Note: See TracChangeset for help on using the changeset viewer.