/** @file ruler.hpp * Definitions for measurement type and operations */ #pragma once #include #include namespace ruler{ /* * measure * ------- */ template using measure = std::chrono::duration; using nanometer = measure; using micrometer = measure; using millimeter = measure; using centimeter = measure; using meter = measure>; using kilometer = measure; /* * pixel density * ------------- */ template using pixel_density = std::chrono::duration; using ppm = pixel_density>; using ppcm = pixel_density>; using ppmm = pixel_density>; /* * ruler defined literals * ---------------------- */ namespace literals{ nanometer operator"" _nm(unsigned long long n); millimeter operator"" _mm(unsigned long long n); centimeter operator"" _cm(unsigned long long n); meter operator"" _m(unsigned long long n); kilometer operator"" _km(unsigned long long n); ppm operator"" _ppm(unsigned long long n); ppcm operator"" _ppcm(unsigned long long n); ppmm operator"" _ppmm(unsigned long long n); ppm operator"" _ppm(long double n); ppcm operator"" _ppcm(long double n); ppmm operator"" _ppmm(long double n); } // end of namespace literals } // end of namespace ruler /* * stream operators * ---------------- */ std::ostream& operator<<(std::ostream& out, ruler::ppm const& ppm); std::ostream& operator<<(std::ostream& out, ruler::ppcm const& ppcm); std::ostream& operator<<(std::ostream& out, ruler::ppmm const& ppmm);