aboutsummaryrefslogtreecommitdiff
path: root/dep/g3dlite/include/G3D/SplineExtrapolationMode.h
blob: b5cdc6fb81c543c5620c6d18187f68bc8c08f4f8 (plain)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/** 
  \file G3D/SplineExtrapolationMode.h
 
  \maintainer Michael Mara, http://graphics.cs.williams.edu
 
  \created 2013-01-24
  \edited  2013-01-24

  Copyright 2000-2013, Morgan McGuire.
  All rights reserved.
 */

#ifndef G3D_SplineExtrapolationMode_h
#define G3D_SplineExtrapolationMode_h

#include "G3D/platform.h"
#include "G3D/enumclass.h"


namespace G3D {

/** 
  Describes the behavior of G3D::Spline, etc. when accessing a time outside of the control point range.

  Refer to these as scoped enums, e.g., <code>SplineExtrapolationMode m = SplineExtrapolationMode::CLAMP;</code>.

  Uses the "Intelligent Enum" design pattern 
  http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4001/
 */ 
class SplineExtrapolationMode {
public:
    /** Don't use this enum; use SplineExtrapolationMode instances instead. */
    enum Value {
        CYCLIC,
        LINEAR,
        CLAMP
    };
    Value value;
private:
    
    static const char* toString(int i, Value& v) {
        static const char* str[] = {"CYCLIC", "LINEAR", "CLAMP", NULL}; 
        static const Value val[] = {CYCLIC, LINEAR, CLAMP};
        const char* s = str[i];
        if (s) {
            v = val[i];
        }
        return s;
    }

public:

    G3D_DECLARE_ENUM_CLASS_METHODS(SplineExtrapolationMode);
};




/** 
  Describes the behavior of G3D::Spline
 */ 
class SplineInterpolationMode {
public:
    /** Don't use this enum; use SplineExtrapolationMode instances instead. */
    enum Value {
        LINEAR,
        CUBIC
    };
    Value value;
private:
    
    static const char* toString(int i, Value& v) {
        static const char* str[] = {"LINEAR", "CUBIC", NULL}; 
        static const Value val[] = {LINEAR, CUBIC};
        const char* s = str[i];
        if (s) {
            v = val[i];
        }
        return s;
    }

public:

    G3D_DECLARE_ENUM_CLASS_METHODS(SplineInterpolationMode);

};


} // namespace G3D

G3D_DECLARE_ENUM_CLASS_HASHCODE(G3D::SplineExtrapolationMode);
G3D_DECLARE_ENUM_CLASS_HASHCODE(G3D::SplineInterpolationMode);

#endif