Bonjour,

Je viens de finir d'écrire une classe toute simple permettant de calculer le temps écoulé d'un point à l'autre d'un algo.
Vu que j'écris le plus souvent des routines en C++ pas vraiment orientées objet / réutilisables, j'aimerai savoir si dans ce code vous voyez des choses dérangeantes ou contraire aux bonnes pratiques.

Je pense aux points suivants :

-usage des inline
-retour de références sur membres par les getters (devrai-je préférer une copie? )
-affectation de classe avec "=" (dans ptime, il me semble que "=" n'est pas redéfini pour retourner une référence), faudrait-il y aller à coup de pointeurs?
-autres?

Merci d'avance...

Stopwatch.h

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
#ifndef _STOPWATCH_H
#define _STOPWATCH_H
 
#include <boost/date_time.hpp>
namespace bpt = boost::posix_time;
 
 
class Stopwatch
{
    public:
 
        //value returned in case of misuse of the class
        static const long NO_DURATION = -1000;
 
        Stopwatch( bool immediateStart  );
        virtual ~Stopwatch();
 
        //watch control
        inline void start();
        inline void stop();
        inline void reset();
 
        //result calculation
        long elapsedMillis() const;
 
        inline const bpt::ptime& getStartTime() const;
        inline const bpt::ptime& getStopTime() const;
 
    private:
 
        bpt::ptime startTime;
        bpt::ptime stopTime;
};
 
 
inline const bpt::ptime& Stopwatch::getStartTime() const
{
    return startTime;
}
 
inline const  bpt::ptime& Stopwatch::getStopTime() const
{
    return stopTime;
}
 
void inline Stopwatch::reset()
{
    startTime = bpt::not_a_date_time ;
    stopTime = bpt::not_a_date_time ;
}
 
 
void inline Stopwatch::start()
{
    startTime = bpt::microsec_clock::universal_time() ;
    stopTime = bpt::not_a_date_time ;
}
 
void inline Stopwatch::stop()
{
    stopTime = bpt::microsec_clock::universal_time() ;
}
 
#endif	/* _STOPWATCH_H */
Stopwatch.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
 
#include "Stopwatch.h"
 
 
 
Stopwatch::Stopwatch( bool immediateStart )
: startTime( immediateStart ? bpt::microsec_clock::universal_time() : bpt::not_a_date_time )
{
}
 
Stopwatch::~Stopwatch()
{
}
 
long Stopwatch::elapsedMillis() const
{
    //watch isn't running...
    if( startTime.is_not_a_date_time() )
        return NO_DURATION;
 
    //stop() wasn't called, return approx so far;
    if(  stopTime.is_not_a_date_time() )
        return (bpt::microsec_clock::universal_time() - startTime).total_milliseconds();
 
    //normal
    return (stopTime - startTime).total_milliseconds();
}