Unit
Biblioteca utilitária para facilitar o tratamento de unidades
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
UnitManager Class Reference

Classe singleton responsável por gerenciar os tipos de unidades e categorias disponíveis. More...

#include <unitManager.h>

Collaboration diagram for UnitManager:
Collaboration graph
[legend]

Public Member Functions

 ~UnitManager ()
 Destrutor.
 
bool init (QString configPath, QString unitsDatabase, QString unitsConfigScript, bool checkUnitDatabase, QString &err)
 Inicializa módulo com leitura dos arquivos de configuração. More...
 
const UnitgetUnit (QString name, bool normalize)
 Retorna uma unidade associado ao nome recebido como parâmetro. More...
 
const UnitConvertergetConverter (const Unit &srcUnit, const Unit &destUnit)
 Retorna objeto para converter dados de srcUnit para destUnit. More...
 
int numCategories () const
 Retorna o número de categorias cadastradas.
 
QString categoryName (int category) const
 Retorna o nome da grandeza associada à categoria recebida como parâmetro. More...
 
QStringList categorySymbols (int category) const
 Retorna uma lista com os símbolos configurados de todas as unidades associadas à categoria recebida como parâmetro. More...
 

Static Public Member Functions

static UnitManagerinstance ()
 Retorna o gerenciador de tipos global.
 

Private Member Functions

 UnitManager ()
 Cosntrutor privado. O gerenciador deve ser instanciado através de chamada a instance()
 
bool initUnitDatabase (QString configPath, QString unitsDatabase, QString &err)
 Carrega a base de dados de unidade e configura o sistema de unidades.
 
bool initCategories (QString configPath, QString unitsConfigScript, QString &err)
 Carrega informações de categorias em _categoryData.
 
bool initCategorySiMapping (bool checkDatabase, QString &err)
 Percorre a lista de categorias encontrando seus tipos e preenchendo o mapa _categorySiTypes.
 
void printCategoryList () const
 Função auxiliar que imprime o conteúdo lista de categorias. Auxilio a debug e logging.
 
void printCategoryMapping () const
 Função auxiliar que imprime o mapeamento de categorias e unidades SI. Auxilio a debug e logging.
 

Private Attributes

ut_system * _unitSystem
 Sistema de unidades utilizado.
 
QMap< QString, Unit_unitCache
 Cache de unidades já processadas.
 
QMap< QPair< QString, QString >, UnitConverter_convCache
 Cache de conversores de unidade.
 
QList< QPair< QString, QStringList > > _categoryData
 Lista armazenando para cada categoria uma tupla contendo seu nome e uma lista de unidades padrão associadas a esta categoria.
 
QMap< QString, int > _categorySiTypes
 Mapa associando unidades Si básicas com as categorias cadastradas.
 

Detailed Description

Classe singleton responsável por gerenciar os tipos de unidades e categorias disponíveis.

É a classe responsável por carregar a base de dados de conversão de unidades e por carregar um arquivo de configuração Lua que contém listas de categorias de unidades.

Cada categoria representa uma grandeza física e são utilizadas para sugerir unidades de conversão para uma unidade.

Esta classe é um singleton, e portanto o gerenciador de tipos deve ser sempre obtida através de uma chamada a UnitManager::instance()

Antes da primeira utilização das funções do UnitManager, a função init() deve ser chamada para inicialização do módulo com leitura e processamento dos arquivos de configuração.

Além de processar as consfigurações, o UnitManager mantém um cache de unidades e conversores para que não seja necessário efetuar continuamente o parse das unidades representadas por strings.

Se UNIT_USE_THREADS estiver definido, as funções getUnit() e getConverter() serão protegidas por um mutex. Código assume que a criação do Unit Manager e sua inicialização serão feitas no thread principal em ambiente livre de concorrência.

As funções UnitConverter::convert() e UnitConverter::convertArray() são naturalmente thread safe. Já a função Unit::canConvertTo() chama ut_are_convertible() que escreve em uma variável global a descrição de erro em caso de erro. Como não usamos a descrição de erro para nada, isto n~eo é um problema.

Member Function Documentation

◆ categoryName()

QString UnitManager::categoryName ( int  category) const

Retorna o nome da grandeza associada à categoria recebida como parâmetro.

A primeira categoria possuí identificador 1 (0 indica categoria desconhecida). Desta forma, para obter o nome de todas as categorias utilize:

for(int i=1, size=UnitManager::instance()->numCategories(); i<=size; i++)
{
}

◆ categorySymbols()

QStringList UnitManager::categorySymbols ( int  category) const

Retorna uma lista com os símbolos configurados de todas as unidades associadas à categoria recebida como parâmetro.

Ver comentários em UnitManager::categoryName() sobre o parâmetro category

◆ getConverter()

const UnitConverter & UnitManager::getConverter ( const Unit srcUnit,
const Unit destUnit 
)

Retorna objeto para converter dados de srcUnit para destUnit.

Se as unidades forem incompatíveis ou não existirem parâmetros de conversão cadastrados entre as unidades, retorna um converter inválido. Utilize a função UnitConverter::isValid() para verificar se a conversão é possível.

◆ getUnit()

const Unit & UnitManager::getUnit ( QString  name,
bool  normalize 
)

Retorna uma unidade associado ao nome recebido como parâmetro.

Se o nome recebido não corresponder a nenhuma das opções existentes para os tipos cadastrados, retorna uma unidade que apenas armazena seu nome e não pode ser usada em processos de conversão

Parameters
nameNome da unidade. Não deve ser vazio nem conter espaços em seu início / fim.
normalizeSe true (default), indica que se a unidade for igual a alguma das unidades cadastradas para a categoria, o nome recebido deve ser transformado no nome "normalizado" (padrão) desta unidade. Ex: m*s = s*m = m.s Se "m.s" for uma unidade cadastrada para a categoria de velocidade, transforma "m*s" em "m.s"

◆ init()

bool UnitManager::init ( QString  configPath,
QString  unitsDatabase,
QString  unitsConfigScript,
bool  checkUnitDatabase,
QString err 
)

Inicializa módulo com leitura dos arquivos de configuração.

Parameters
configPathPath de onde os arquivos de configuração deverão ser lidos (sem separador de diretorios no final).
checkUnitDatabaseSe true indica que as entradas da base de dados de unidades e do arquivo de categorias devem ser validadas
errString preenchida com mensagem de erro no caso de falha na leitura dos arquivos
Returns
Retorna true se a inicialização foi efetuada com sucesso, false caso contrário

The documentation for this class was generated from the following files: