Changeset 487 for trunk/lib/Stats.h


Ignore:
Timestamp:
Oct 14, 2007, 12:20:17 AM (14 years ago)
Author:
Peter Johansson
Message:

fixes #272 in trunk and also #211 - split stats class into inherited and base class

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Stats.h

    r484 r487  
    5151    explicit Stats(const std::string& path);
    5252
     53    /**
     54       \brief Destructor
     55    */
     56    virtual ~Stats(void);
     57
    5358    ///
    5459    /// @return set of authors
    5560    ///
    56     inline const std::set<std::string>& authors(void) const { return authors_; }
     61    const std::set<std::string>& authors(void) const;
    5762
    5863    ///
    5964    ///
    6065    ///
    61     inline u_int code(void) const { return accumulated(code_).back(); }
     66    u_int code(const std::string& user="all") const;
     67
    6268
    6369    ///
    6470    ///
    6571    ///
    66     inline u_int code(const std::string& user) const
    67     { return accumulated(code_, user).back(); }
     72    u_int comments(const std::string& user="all") const;
    6873
    6974    ///
    7075    ///
    7176    ///
    72     inline u_int comments(void) const { return accumulated(comments_).back(); }
     77    u_int empty(const std::string& user="all") const;
     78
     79    ///
     80    ///
     81    ///
     82    svn_revnum_t last_changed_rev(void) const;
    7383
    7484    ///
    7585    ///
    7686    ///
    77     inline u_int comments(const std::string& user) const
    78     { return accumulated(comments_, user).back(); }
    79 
    80     ///
    81     ///
    82     ///
    83     inline u_int empty(void) const { return accumulated(empty_).back(); }
    84 
    85     ///
    86     ///
    87     ///
    88     inline u_int empty(const std::string& user) const
    89     { return accumulated(empty_, user).back(); }
    90 
    91     ///
    92     ///
    93     ///
    94     inline u_int last_changed_rev(void) const { return last_changed_rev_; }
    95 
    96     ///
    97     ///
    98     ///
    99     inline u_int lines(void) const { return accumulated(total_).back(); }
    100 
    101     ///
    102     ///
    103     ///
    104     inline u_int lines(const std::string& user) const
    105     { return accumulated(total_, user).back(); }
     87    u_int lines(const std::string& user="all") const;
    10688
    10789    /**
     
    11294    bool load_cache(std::istream&);
    11395
     96    /**
     97       Do the parsing
     98    */
    11499    void parse(const std::string&);
    115100
     
    120105
    121106    ///
    122     /// Create statistics graph.
    123     ///
    124     void plot_init(const std::string& output) const;
    125 
    126     ///
    127     /// Summary plot for the first page
     107    /// Plotting code, comment, other, and total in same plot (for
     108    /// 'all' not individual authors).
    128109    ///
    129110    void plot_summary(const std::string& output) const;
    130111
    131112    /**
     113       Send Stats to a stream.
    132114     */
    133115    void print(std::ostream&) const;
     
    136118    /// @brief Clear all statistics
    137119    ///
    138     inline void reset(void)
    139     {
    140       code_.clear(); comments_.clear(); empty_.clear(); total_.clear();
    141       authors_.clear();
    142     }
     120    void reset(void);
    143121
    144122    ///
    145123    /// \return latest revision for whole project
    146124    ///
    147     inline u_int revision(void) const { return revision_; }
     125    svn_revnum_t revision(void) const { return revision_; }
    148126
    149     ///
    150     ///
    151     ///
    152     inline std::vector<u_int> total(const std::string& user) const
    153     { return accumulated(total_, user); }
    154 
    155     ///
    156     /// @return resulting Stats
    157     ///
    158     Stats& operator+=(const Stats&);
    159 
    160   private:
    161     // Peter, if the vector is sparse make it a map
    162     typedef std::map<std::string, std::vector<u_int> > Map_;
    163     typedef Map_::iterator MapIter_;
    164     typedef Map_::const_iterator MapConstIter_;
    165 
    166     ///
    167     /// Copy constructor (not implemented)
    168     ///
    169     Stats(const Stats& other);
    170 
    171     ///
    172     /// @return accumulated vector of total
    173     ///
    174     std::vector<u_int> accumulated(const Map_&) const;
    175 
    176     ///
    177     /// @return accumulated vector of stats_[user]
    178     ///
    179     std::vector<u_int> accumulated(const Map_&,
    180                                    const std::string& user) const;
    181 
    182     ///
    183     /// @brief adding a line to user from revision to the stats
    184     ///
    185     void add(const std::string& user, const u_int& revision,
    186              const Parser::line_type&);
    187 
    188     // Change this string if cache format is changed in such a way
    189     // that all old cache files are obsolete.
    190     inline std::string end_of_cache(void) const
    191     {return "END OF OK CACHE FILE VERSION 2";}
     127  protected:
    192128    inline std::string code_cache(void) const {return "CACHE CODE";}
    193129    inline std::string comments_cache(void) const {return "CACHE COMMENTS";}
    194130    inline std::string empty_cache(void) const {return "CACHE EMPTY";}
    195131    inline std::string total_cache(void) const {return "CACHE TOTAL";}
    196    
     132
     133    typedef std::map<std::string, std::vector<u_int> > v_map;
     134
     135    void add_author(std::string);
     136    void add_authors(std::set<std::string>::const_iterator,
     137                     std::set<std::string>::const_iterator);
    197138
    198139    /**
    199        Load map from stream
     140       Function to be called from children's operator+=
    200141     */
    201     void load(std::istream&, Map_&);
     142    void base_add(const Stats&);
    202143
    203     void print(std::ostream& os, const Map_& map) const;
     144    /**
     145       add range [\a first, \a last) to \a map
     146     */
     147    void base_add(v_map::const_iterator first, v_map::const_iterator last,
     148                  v_map& map);
    204149
     150    ///
     151    /// Init statistics graph.
     152    ///
     153    void plot_init(const std::string& output) const;
     154    inline bool valid(void) const {return valid_;}
     155  private:
     156    virtual bool do_load_cache(std::istream&)=0;
     157    virtual void do_parse(const std::string&)=0;
     158    virtual std::string do_plot(const std::string&, const std::string&) const=0;
     159    virtual void do_print(std::ostream& ) const=0;
     160    virtual void do_reset(void)=0;
     161   
     162    const std::vector<u_int>& get_vector(const v_map&, std::string user) const;
     163    virtual std::vector<u_int> vector(std::string type,
     164                                      std::string user) const=0;
     165    void update_stats(void);
     166
     167    v_map total_;
     168    v_map code_;
     169    v_map comments_;
     170    v_map other_;
     171    bool valid_;
    205172    svn_revnum_t revision_; // Should be the latest revision for whole project
    206173    svn_revnum_t last_changed_rev_; // Should be the latest revision for file
    207174
    208175    std::set<std::string> authors_;
    209     Map_ code_;
    210     Map_ comments_;
    211     Map_ empty_;
    212     Map_ total_;
    213176  };
    214177}} // end of namespace svndigest end of namespace theplu
Note: See TracChangeset for help on using the changeset viewer.