Unit
Biblioteca utilitária para facilitar o tratamento de unidades
Loading...
Searching...
No Matches
unit.h
Go to the documentation of this file.
1/************************************************************************
2**
3** Copyright (C) 2012 K2FS Sistemas e Projetos Ltd.
4** All rights reserved.
5**
6** This file is part of the "Pdm version 2" library and should not
7** be included in other softwares without written permission of K2
8** Sistemas. It is provided AS IS, with NO WARRANTY OF ANY KIND,
9** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
10** A PARTICULAR PURPOSE.
11**
12** Contact information: www.k2sistemas.com.br
13**
14************************************************************************/
15
26#ifndef _UNIT_H_
27#define _UNIT_H_
28
29#include <assert.h>
30#include <QString>
31#include <QSharedPointer>
32
33#include <udunits2.h>
34
35#include "unitConfig.h"
36
37class UnitConverter;
38
39
41class UNIT_API_EXPORT Unit
42{
43public:
45 Unit() : _unitCategory(0) {}
46
47 Unit(QString unitName, bool normalize=false);
48
49 ~Unit();
50
52 bool isKnown() const { return !_udunit.isNull() && udunit(); }
53
55 bool isUnknown() const { return !isKnown(); }
56
63 int category() const { return _unitCategory; }
64
66 QString name() const { return _unitName; }
67
74 QString siConv() const { return _siConv; }
75
77 QString siBase() const { return extractSiBase(_siConv); }
78
80 bool operator==(const Unit& o) const
81 {
82 return (_udunit && _udunit == o._udunit) || (_siConv == o._siConv);
83 }
84
86 bool operator!=(const Unit& o) const { return !(*this == o); }
87
89 bool equal(const Unit& o) const
90 {
91 return (_udunit && _udunit == o._udunit) || (_unitName == o._unitName);
92 }
93
94 UnitConverter getConverter(const Unit& destUnit) const;
95
96 bool canConvertTo(const Unit& destUnit) const;
97
98 double convertTo(double val, const Unit& destUnit, bool* ok=NULL) const;
99
100 void print() const;
101
102 static UnitConverter* converter(const Unit& srcUnit, const Unit& dstUnit, bool* compatible = NULL);
103
104private:
105 friend class UnitConverter;
106 friend class UnitManager;
107
115 {
117 UnitWrapper(ut_unit* u) : unit(u) {}
119 ~UnitWrapper() { ut_free(unit); }
120
121 ut_unit* unit;
122 };
123
126
127
128 Unit(SharedUnitWrapper udunit, int category, QString name, QString siconv);
129
130 static QString extractSiBase(QString unit);
131
138 ut_unit* udunit() const { assert(!_udunit.isNull()); return _udunit.data()->unit; }
139
141 void setCategory(int cat) { _unitCategory = cat; }
142
145
149};
150
151
152#endif
Classe responsável pela conversão de unidades entre valores numéricos.
Definition unitConverter.h:33
Classe responsável por identificar e agrupar tipos de unidades.
Definition unit.h:42
int _unitCategory
Categoria (grupo) da unidade.
Definition unit.h:146
ut_unit * udunit() const
Retorna a representação da unidade para a biblioteca UDUNITS.
Definition unit.h:138
int category() const
Retorna o identificador da categoria ao qual a unidade pertence, ou 0 se a unidade não pertencer a ne...
Definition unit.h:63
QString _unitName
Nome com o qual a unidade foi construída.
Definition unit.h:147
bool isUnknown() const
Retorna true se a unidade é desconhecida e não pode ser convertida.
Definition unit.h:55
QSharedPointer< UnitWrapper > SharedUnitWrapper
Tipo auxiliar para uso interno. SharedPointer para um UnitWrapper.
Definition unit.h:125
QString name() const
Retorna o nome utilizado para construir a unidade.
Definition unit.h:66
QString siConv() const
Retorna uma string padronizada com o fator de conversão e a unidade SI equivalente a esta unidade,...
Definition unit.h:74
Unit()
Construtor default.
Definition unit.h:45
bool isKnown() const
Retorna true se a unidade é conhecida e pode ser convertida para outras unidades de mesma grandeza.
Definition unit.h:52
bool operator==(const Unit &o) const
Operador de igualdade.
Definition unit.h:80
bool equal(const Unit &o) const
Retorna true se a unidades forem iguais.
Definition unit.h:89
QString siBase() const
Retorna a grandeza SI associada a esta unidade.
Definition unit.h:77
bool operator!=(const Unit &o) const
Operador de desigualdade.
Definition unit.h:86
QString _siConv
Conversão da unidade para o SI.
Definition unit.h:148
void setCategory(int cat)
Altera a categoria da unidade. Usada por UnitManager.
Definition unit.h:141
SharedUnitWrapper _udunit
Representação da unidade "carregada". Shared pointer permite a cópia de unidades.
Definition unit.h:144
Classe singleton responsável por gerenciar os tipos de unidades e categorias disponíveis.
Definition unitManager.h:40
Estrutura auxiliar para uso interno por Unit.
Definition unit.h:115
UnitWrapper(ut_unit *u)
Construtor. Armazena a representação interna de uma unidade.
Definition unit.h:117
ut_unit * unit
Representação da unidade pela biblioteca UDUNITS.
Definition unit.h:121
~UnitWrapper()
Destrutor.
Definition unit.h:119
Declaration of useful configuration definitions.