1 #ifndef SEEN_NUMBER_OPT_NUMBER_H
2 #define SEEN_NUMBER_OPT_NUMBER_H
4 /** \file
5 * <number-opt-number> implementation.
6 */
7 /*
8 * Authors:
9 * Hugo Rodrigues <haa.rodrigues@gmail.com>
10 *
11 * Copyright (C) 2006 Hugo Rodrigues
12 *
13 * Released under GNU GPL, read the file 'COPYING' for more information
14 */
16 #include <glib.h>
17 #include <glib/gprintf.h>
18 //todo: use glib instead of stdlib
19 #include <stdlib.h>
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
25 class NumberOptNumber {
27 public:
29 gfloat number;
31 gfloat optNumber;
33 guint _set : 1;
35 guint optNumber_set : 1;
37 NumberOptNumber()
38 {
39 number = 0.0;
40 optNumber = 0.0;
42 _set = FALSE;
43 optNumber_set = FALSE;
44 }
46 gfloat getNumber()
47 {
48 if(_set)
49 return number;
50 return -1;
51 }
53 gfloat getOptNumber()
54 {
55 if(optNumber_set)
56 return optNumber;
57 return -1;
58 }
60 void setOptNumber(gfloat num)
61 {
62 optNumber_set = true;
63 optNumber = num;
64 }
66 void setNumber(gfloat num)
67 {
68 _set = true;
69 number = num;
70 }
72 gchar *getValueString(gchar *str)
73 {
74 if( _set )
75 {
77 if( optNumber_set )
78 {
79 g_sprintf(str, "%lf %lf", number, optNumber);
80 }
81 else {
82 g_sprintf(str, "%lf", number);
83 }
84 }
85 return str;
86 }
88 void set(gchar const *str)
89 {
90 if(!str)
91 return;
93 gchar **values = g_strsplit(str, " ", 2);
95 if( values[0] != NULL )
96 {
97 number = strtof(values[0], NULL);
98 _set = TRUE;
100 if( values[1] != NULL )
101 {
102 // optNumber = g_ascii_strtod(values[1], NULL);
103 optNumber = strtof(values[1], NULL);
104 optNumber_set = TRUE;
105 }
106 else
107 optNumber_set = FALSE;
108 }
109 else {
110 _set = FALSE;
111 optNumber_set = FALSE;
112 }
113 }
115 };
117 #endif /* !SEEN_NUMBER_OPT_NUMBER_H */
119 /*
120 Local Variables:
121 mode:c++
122 c-file-style:"stroustrup"
123 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
124 indent-tabs-mode:nil
125 fill-column:99
126 End:
127 */
128 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :