|
Packit |
bfcc33 |
#ifndef SASS_UNITS_H
|
|
Packit |
bfcc33 |
#define SASS_UNITS_H
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
#include <cmath>
|
|
Packit |
bfcc33 |
#include <string>
|
|
Packit |
bfcc33 |
#include <sstream>
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
namespace Sass {
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
const double PI = std::acos(-1);
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
enum UnitClass {
|
|
Packit |
bfcc33 |
LENGTH = 0x000,
|
|
Packit |
bfcc33 |
ANGLE = 0x100,
|
|
Packit |
bfcc33 |
TIME = 0x200,
|
|
Packit |
bfcc33 |
FREQUENCY = 0x300,
|
|
Packit |
bfcc33 |
RESOLUTION = 0x400,
|
|
Packit |
bfcc33 |
INCOMMENSURABLE = 0x500
|
|
Packit |
bfcc33 |
};
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
enum UnitType {
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
// size units
|
|
Packit |
bfcc33 |
IN = UnitClass::LENGTH,
|
|
Packit |
bfcc33 |
CM,
|
|
Packit |
bfcc33 |
PC,
|
|
Packit |
bfcc33 |
MM,
|
|
Packit |
bfcc33 |
PT,
|
|
Packit |
bfcc33 |
PX,
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
// angle units
|
|
Packit |
bfcc33 |
DEG = ANGLE,
|
|
Packit |
bfcc33 |
GRAD,
|
|
Packit |
bfcc33 |
RAD,
|
|
Packit |
bfcc33 |
TURN,
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
// time units
|
|
Packit |
bfcc33 |
SEC = TIME,
|
|
Packit |
bfcc33 |
MSEC,
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
// frequency units
|
|
Packit |
bfcc33 |
HERTZ = FREQUENCY,
|
|
Packit |
bfcc33 |
KHERTZ,
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
// resolutions units
|
|
Packit |
bfcc33 |
DPI = RESOLUTION,
|
|
Packit |
bfcc33 |
DPCM,
|
|
Packit |
bfcc33 |
DPPX,
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
// for unknown units
|
|
Packit |
bfcc33 |
UNKNOWN = INCOMMENSURABLE
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
};
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
extern const double size_conversion_factors[6][6];
|
|
Packit |
bfcc33 |
extern const double angle_conversion_factors[4][4];
|
|
Packit |
bfcc33 |
extern const double time_conversion_factors[2][2];
|
|
Packit |
bfcc33 |
extern const double frequency_conversion_factors[2][2];
|
|
Packit |
bfcc33 |
extern const double resolution_conversion_factors[3][3];
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
enum Sass::UnitType string_to_unit(const std::string&);
|
|
Packit |
bfcc33 |
const char* unit_to_string(Sass::UnitType unit);
|
|
Packit |
bfcc33 |
enum Sass::UnitClass get_unit_type(Sass::UnitType unit);
|
|
Packit |
bfcc33 |
std::string get_unit_class(Sass::UnitType unit);
|
|
Packit |
bfcc33 |
std::string unit_to_class(const std::string&);
|
|
Packit |
bfcc33 |
// throws incompatibleUnits exceptions
|
|
Packit |
bfcc33 |
double conversion_factor(const std::string&, const std::string&, bool = true);
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
}
|
|
Packit |
bfcc33 |
|
|
Packit |
bfcc33 |
#endif
|