number-opt-number.h revision 11f343b8117dbf56931f537820c2749a8232fec2
36a048753a41b465ae130b361fb3b68c605e3e86kiirala#ifndef SEEN_NUMBER_OPT_NUMBER_H
36a048753a41b465ae130b361fb3b68c605e3e86kiirala#define SEEN_NUMBER_OPT_NUMBER_H
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala/** \file
36a048753a41b465ae130b361fb3b68c605e3e86kiirala * <number-opt-number> implementation.
36a048753a41b465ae130b361fb3b68c605e3e86kiirala */
36a048753a41b465ae130b361fb3b68c605e3e86kiirala/*
36a048753a41b465ae130b361fb3b68c605e3e86kiirala * Authors:
36a048753a41b465ae130b361fb3b68c605e3e86kiirala * Hugo Rodrigues <haa.rodrigues@gmail.com>
36a048753a41b465ae130b361fb3b68c605e3e86kiirala *
36a048753a41b465ae130b361fb3b68c605e3e86kiirala * Copyright (C) 2006 Hugo Rodrigues
36a048753a41b465ae130b361fb3b68c605e3e86kiirala *
36a048753a41b465ae130b361fb3b68c605e3e86kiirala * Released under GNU GPL, read the file 'COPYING' for more information
36a048753a41b465ae130b361fb3b68c605e3e86kiirala */
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala#include <glib.h>
36a048753a41b465ae130b361fb3b68c605e3e86kiirala#include <glib/gprintf.h>
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White#include <cstdlib>
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White
2a67507e7a675c7c516ab207418d3a5c7bfe5989buliabyak#include "svg/stringstream.h"
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiiralaclass NumberOptNumber {
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiiralapublic:
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White float number;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White float optNumber;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White unsigned int _set : 1;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White unsigned int optNumber_set : 1;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala NumberOptNumber()
36a048753a41b465ae130b361fb3b68c605e3e86kiirala {
36a048753a41b465ae130b361fb3b68c605e3e86kiirala number = 0.0;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala optNumber = 0.0;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala _set = FALSE;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala optNumber_set = FALSE;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White float getNumber()
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues {
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues if(_set)
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues return number;
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues return -1;
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White float getOptNumber()
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues {
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues if(optNumber_set)
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues return optNumber;
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues return -1;
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues }
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White void setOptNumber(float num)
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues {
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues optNumber_set = true;
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues optNumber = num;
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues }
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White void setNumber(float num)
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues {
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues _set = true;
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues number = num;
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
514fb30cb30a34ab3d77700af8093d808fb39815jucablues bool optNumIsSet(){
514fb30cb30a34ab3d77700af8093d808fb39815jucablues return optNumber_set;
514fb30cb30a34ab3d77700af8093d808fb39815jucablues }
514fb30cb30a34ab3d77700af8093d808fb39815jucablues
514fb30cb30a34ab3d77700af8093d808fb39815jucablues bool numIsSet(){
514fb30cb30a34ab3d77700af8093d808fb39815jucablues return _set;
514fb30cb30a34ab3d77700af8093d808fb39815jucablues }
514fb30cb30a34ab3d77700af8093d808fb39815jucablues
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White char *getValueString()
8c833a9abfd335f0305466ad7451c03c2f6b50ddhaa_rodrigues {
2a67507e7a675c7c516ab207418d3a5c7bfe5989buliabyak Inkscape::SVGOStringStream os;
2a67507e7a675c7c516ab207418d3a5c7bfe5989buliabyak
36a048753a41b465ae130b361fb3b68c605e3e86kiirala if( _set )
36a048753a41b465ae130b361fb3b68c605e3e86kiirala {
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala if( optNumber_set )
36a048753a41b465ae130b361fb3b68c605e3e86kiirala {
2a67507e7a675c7c516ab207418d3a5c7bfe5989buliabyak os << number << " " << optNumber;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala else {
2a67507e7a675c7c516ab207418d3a5c7bfe5989buliabyak os << number;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
2a67507e7a675c7c516ab207418d3a5c7bfe5989buliabyak return g_strdup(os.str().c_str());
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White void set(char const *str)
36a048753a41b465ae130b361fb3b68c605e3e86kiirala {
36a048753a41b465ae130b361fb3b68c605e3e86kiirala if(!str)
36a048753a41b465ae130b361fb3b68c605e3e86kiirala return;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
11f343b8117dbf56931f537820c2749a8232fec2Liam P. White char **values = g_strsplit(str, " ", 2);
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala if( values[0] != NULL )
36a048753a41b465ae130b361fb3b68c605e3e86kiirala {
2a67507e7a675c7c516ab207418d3a5c7bfe5989buliabyak number = g_ascii_strtod(values[0], NULL);
36a048753a41b465ae130b361fb3b68c605e3e86kiirala _set = TRUE;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala if( values[1] != NULL )
36a048753a41b465ae130b361fb3b68c605e3e86kiirala {
2a67507e7a675c7c516ab207418d3a5c7bfe5989buliabyak optNumber = g_ascii_strtod(values[1], NULL);
36a048753a41b465ae130b361fb3b68c605e3e86kiirala optNumber_set = TRUE;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala else
36a048753a41b465ae130b361fb3b68c605e3e86kiirala optNumber_set = FALSE;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala else {
36a048753a41b465ae130b361fb3b68c605e3e86kiirala _set = FALSE;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala optNumber_set = FALSE;
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
7df9bc9728133b770919198ecfd034602696d46fbuliabyak
7df9bc9728133b770919198ecfd034602696d46fbuliabyak g_strfreev(values);
36a048753a41b465ae130b361fb3b68c605e3e86kiirala }
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala};
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala#endif /* !SEEN_NUMBER_OPT_NUMBER_H */
36a048753a41b465ae130b361fb3b68c605e3e86kiirala
36a048753a41b465ae130b361fb3b68c605e3e86kiirala/*
36a048753a41b465ae130b361fb3b68c605e3e86kiirala Local Variables:
36a048753a41b465ae130b361fb3b68c605e3e86kiirala mode:c++
36a048753a41b465ae130b361fb3b68c605e3e86kiirala c-file-style:"stroustrup"
36a048753a41b465ae130b361fb3b68c605e3e86kiirala c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
36a048753a41b465ae130b361fb3b68c605e3e86kiirala indent-tabs-mode:nil
36a048753a41b465ae130b361fb3b68c605e3e86kiirala fill-column:99
36a048753a41b465ae130b361fb3b68c605e3e86kiirala End:
36a048753a41b465ae130b361fb3b68c605e3e86kiirala*/
a4030d5ca449e7e384bc699cd249ee704faaeab0Chris Morgan// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :