source: trunk/lib/Stats.cc @ 23

Last change on this file since 23 was 23, checked in by Peter Johansson, 16 years ago

added print functionality

File size: 2.2 KB
Line 
1//$Id$
2
3#include "Stats.h"
4#include "utility.h"
5
6#include <map>
7#include <numeric>
8#include <string>
9#include <utility>
10#include <vector>
11
12#include <iostream>
13
14namespace theplu{
15namespace svnstat{
16
17  Stats::Stats()
18  {
19  }
20
21
22  std::vector<u_int> Stats::accumulated(void) const
23  {
24    std::vector<u_int> sum;
25    if (map_.empty())
26      return sum;
27
28    // sum of all users
29    std::accumulate(map_.begin(), map_.end(), sum, 
30        PairValuePlus<std::string,u_int>());
31
32    // calculate accumulated sum
33    std::vector<u_int> accum(sum.size());
34    std::partial_sum(sum.begin(),sum.end(),accum.begin());   
35    return accum;
36  }
37
38  std::vector<u_int> Stats::accumulated(const std::string& user)
39  {
40    std::vector<u_int> vec=map_[user];
41    if (vec.empty())
42      return vec;
43    std::vector<u_int> accum(vec.size());
44    std::partial_sum(vec.begin(),vec.end(),accum.begin());
45    return accum;
46  }
47
48  void Stats::add(const std::string& user, const u_int& rev)
49  {
50    std::vector<u_int> vec = map_[user];
51    if (vec.size() < rev+1){
52      u_int i=vec.size();
53      vec.resize(rev+1);
54      for (; i<rev; i++)
55  vec[i]=0;
56      vec[rev]=1;
57    }
58    else
59      vec[rev]++;
60    map_[user]=vec;
61
62  }
63
64  void Stats::print(std::ostream& os) const
65  {
66    std::vector<std::pair<std::string, std::vector<u_int> > > accum;
67    for (MapConstIter_ i= map_.begin(); i != map_.end(); i++){
68      std::pair<std::string, std::vector<u_int> > element(*i);
69      std::partial_sum(element.second.begin(),element.second.end(),
70                       element.second.begin());
71      accum.push_back(element);
72    }
73    sort(accum.begin(),accum.end(), CodingMore());
74    os << "<table>\n";
75    for (size_t i = 0; i<accum.size(); i++){
76      os << "<tr><td>\n" << accum[i].first << "</td><td>" 
77         << accum[i].second.back() << "</td></tr>"; 
78    }
79    os << "</table>\n";
80
81    os << "<p>[Plot to be here.]</p>\n";         
82  }
83
84  Stats& Stats::operator+=(const Stats& other)
85  {
86    for (MapConstIter_ o_i= other.map_.begin(); o_i != other.map_.end(); ++o_i)
87    {
88      std::pair<MapIter_,bool> result = map_.insert(*o_i);
89      if (!result.second)
90        map_[(*(result.first)).first] = 
91          VectorPlus<u_int>()( (*(result.first)).second, (*o_i).second );
92 
93    }
94    return *this;
95  }
96
97}} // end of namespace svnstat and namespace theplu
Note: See TracBrowser for help on using the repository browser.