Unit
Biblioteca utilitária para facilitar o tratamento de unidades
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 
37 class UnitConverter;
38 
39 
41 class UNIT_API_EXPORT Unit
42 {
43 public:
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 
104 private:
105  friend class UnitConverter;
106  friend class UnitManager;
107 
114  struct UnitWrapper
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
SharedUnitWrapper _udunit
Representação da unidade "carregada". Shared pointer permite a cópia de unidades.
Definition: unit.h:144
QString siBase() const
Retorna a grandeza SI associada a esta unidade.
Definition: unit.h:77
UnitWrapper(ut_unit *u)
Construtor. Armazena a representação interna de uma unidade.
Definition: unit.h:117
QString _siConv
Conversão da unidade para o SI.
Definition: unit.h:148
bool equal(const Unit &o) const
Retorna true se a unidades forem iguais.
Definition: unit.h:89
Classe singleton responsável por gerenciar os tipos de unidades e categorias disponíveis.
Definition: unitManager.h:39
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
int _unitCategory
Categoria (grupo) da unidade.
Definition: unit.h:146
Declaration of usefull configuration definitions.
bool operator==(const Unit &o) const
Operador de igualdade.
Definition: unit.h:80
Classe responsável por identificar e agrupar tipos de unidades.
Definition: unit.h:41
ut_unit * unit
Representação da unidade pela biblioteca UDUNITS.
Definition: unit.h:121
Estrutura auxiliar para uso interno por Unit.
Definition: unit.h:114
bool isUnknown() const
Retorna true se a unidade é desconhecida e não pode ser convertida.
Definition: unit.h:55
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
QSharedPointer< UnitWrapper > SharedUnitWrapper
Tipo auxiliar para uso interno. SharedPointer para um UnitWrapper.
Definition: unit.h:125
Classe responsável pela conversão de unidades entre valores numéricos.
Definition: unitConverter.h:32
void setCategory(int cat)
Altera a categoria da unidade. Usada por UnitManager.
Definition: unit.h:141
~UnitWrapper()
Destrutor.
Definition: unit.h:119
bool isKnown() const
Retorna true se a unidade é conhecida e pode ser convertida para outras unidades de mesma grandeza.
Definition: unit.h:52
QString name() const
Retorna o nome utilizado para construir a unidade.
Definition: unit.h:66
bool operator!=(const Unit &o) const
Operador de desigualdade.
Definition: unit.h:86
QString _unitName
Nome com o qual a unidade foi construída.
Definition: unit.h:147
Unit()
Construtor default.
Definition: unit.h:45