![]() |
Unit
Biblioteca utilitária para facilitar o tratamento de unidades
|
Classe singleton responsável por gerenciar os tipos de unidades e categorias disponíveis. More...
#include <unitManager.h>
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 Unit & | getUnit (QString name, bool normalize) |
Retorna uma unidade associado ao nome recebido como parâmetro. More... | |
const UnitConverter & | getConverter (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 UnitManager * | instance () |
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. | |
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.
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:
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
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.
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
name | Nome da unidade. Não deve ser vazio nem conter espaços em seu início / fim. |
normalize | Se 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" |
bool UnitManager::init | ( | QString | configPath, |
QString | unitsDatabase, | ||
QString | unitsConfigScript, | ||
bool | checkUnitDatabase, | ||
QString & | err | ||
) |
Inicializa módulo com leitura dos arquivos de configuração.
configPath | Path de onde os arquivos de configuração deverão ser lidos (sem separador de diretorios no final). |
checkUnitDatabase | Se true indica que as entradas da base de dados de unidades e do arquivo de categorias devem ser validadas |
err | String preenchida com mensagem de erro no caso de falha na leitura dos arquivos |