GSkyDir.hpp

Knödlseder Jürgen, 03/28/2013 04:15 PM

Download (2.32 KB)

 
1
#ifndef GSKYDIR_HPP
2
#define GSKYDIR_HPP
3

    
4
/* __ Includes ___________________________________________________________ */
5
struct cache {
6
    double sin_dec;
7
    double cos_dec;
8
};
9

    
10
/* __ GSkyDir class ______________________________________________________ */
11
class GSkyDir {
12
public:
13
    GSkyDir(void) : m_ra(0.0), m_dec(0.0) {}
14
    GSkyDir(double ra, double dec) : m_ra(ra), m_dec(dec) {}
15
    virtual ~GSkyDir(void) {}
16
    double dist(const GSkyDir& dir) const;
17
protected:
18
    double m_ra;
19
    double m_dec;
20
};
21

    
22
/* __ GSkyDir2 class _____________________________________________________ */
23
class GSkyDir2 {
24
public:
25
    GSkyDir2(void) : m_ra(0.0), m_dec(0.0), m_has_cache(false) {}
26
    GSkyDir2(double ra, double dec) : m_ra(ra), m_dec(dec), m_has_cache(false) {}
27
    virtual ~GSkyDir2(void) {}
28
    double dist(const GSkyDir2& dir) const;
29
    const double& sin_dec(void) const;
30
    const double& cos_dec(void) const;
31
protected:
32
    double m_ra;
33
    double m_dec;
34
    mutable bool   m_has_cache;
35
    mutable double m_sin_dec;
36
    mutable double m_cos_dec;
37
};
38
inline const double& GSkyDir2::sin_dec(void) const
39
{
40
    if (!m_has_cache) {
41
        m_has_cache = true;
42
        m_sin_dec   = std::sin(m_dec);
43
        m_cos_dec   = std::cos(m_dec);
44
    }
45
    return m_sin_dec;
46
}
47
inline const double& GSkyDir2::cos_dec(void) const
48
{
49
    if (!m_has_cache) {
50
        m_has_cache = true;
51
        m_sin_dec   = std::sin(m_dec);
52
        m_cos_dec   = std::cos(m_dec);
53
    }
54
    return m_cos_dec;
55
}
56

    
57
/* __ GSkyDir3 class _____________________________________________________ */
58
class GSkyDir3 {
59
public:
60
    GSkyDir3(void) : m_ra(0.0), m_dec(0.0), m_has_cache(false) {}
61
    GSkyDir3(double ra, double dec) : m_ra(ra), m_dec(dec), m_has_cache(false) {}
62
    virtual ~GSkyDir3(void) {}
63
    double dist(const GSkyDir3& dir) const;
64
protected:
65
    double m_ra;
66
    double m_dec;
67
    mutable bool   m_has_cache;
68
    mutable double m_sin_dec;
69
    mutable double m_cos_dec;
70
};
71

    
72

    
73
/* __ GSkyDir4 class _____________________________________________________ */
74
class GSkyDir4 {
75
public:
76
    GSkyDir4(void) : m_ra(0.0), m_dec(0.0), m_cache(0) {}
77
    GSkyDir4(double ra, double dec) : m_ra(ra), m_dec(dec), m_cache(0) {}
78
    virtual ~GSkyDir4(void) { if (m_cache != 0) delete m_cache; }
79
    double dist(const GSkyDir4& dir) const;
80
protected:
81
    double m_ra;
82
    double m_dec;
83
    mutable cache* m_cache;
84
};
85

    
86
#endif