Chris@16: // Boost.Units - A C++ library for zero-overhead dimensional analysis and Chris@16: // unit/quantity manipulation and conversion Chris@16: // Chris@16: // Copyright (C) 2003-2008 Matthias Christian Schabel Chris@16: // Copyright (C) 2008 Steven Watanabe Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_UNITS_ABSTRACT_HPP Chris@16: #define BOOST_UNITS_ABSTRACT_HPP Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: namespace units { Chris@16: Chris@16: namespace abstract { Chris@16: Chris@16: struct length_unit_tag : base_unit { }; Chris@16: struct mass_unit_tag : base_unit { }; Chris@16: struct time_unit_tag : base_unit { }; Chris@16: struct current_unit_tag : base_unit { }; Chris@16: struct temperature_unit_tag : base_unit { }; Chris@16: struct amount_unit_tag : base_unit { }; Chris@16: struct luminous_intensity_unit_tag : base_unit { }; Chris@16: struct plane_angle_unit_tag : base_unit { }; Chris@16: struct solid_angle_unit_tag : base_unit { }; Chris@16: Chris@16: typedef make_system< Chris@16: length_unit_tag, Chris@16: mass_unit_tag, Chris@16: time_unit_tag, Chris@16: current_unit_tag, Chris@16: temperature_unit_tag, Chris@16: amount_unit_tag, Chris@16: luminous_intensity_unit_tag, Chris@16: plane_angle_unit_tag, Chris@16: solid_angle_unit_tag Chris@16: >::type system; Chris@16: Chris@16: typedef unit length; ///< abstract unit of length Chris@16: typedef unit mass; ///< abstract unit of mass Chris@16: typedef unit time; ///< abstract unit of time Chris@16: typedef unit current; ///< abstract unit of current Chris@16: typedef unit temperature; ///< abstract unit of temperature Chris@16: typedef unit amount; ///< abstract unit of amount Chris@16: typedef unit luminous_intensity; ///< abstract unit of luminous intensity Chris@16: typedef unit plane_angle; ///< abstract unit of plane angle Chris@16: typedef unit solid_angle; ///< abstract unit of solid angle Chris@16: Chris@16: } // namespace abstract Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Length]"; } Chris@16: static std::string symbol() { return "[L]"; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Mass]"; } Chris@16: static std::string symbol() { return "[M]"; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Time]"; } Chris@16: static std::string symbol() { return "[T]"; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Electric Current]"; } Chris@16: static std::string symbol() { return "[I]"; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Temperature]"; } Chris@16: static std::string symbol() { return "[Theta]"; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Amount]"; } Chris@16: static std::string symbol() { return "[N]"; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Luminous Intensity]"; } Chris@16: static std::string symbol() { return "[J]"; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Plane Angle]"; } Chris@16: static std::string symbol() { return "[QP]"; } Chris@16: }; Chris@16: Chris@16: template<> Chris@16: struct base_unit_info Chris@16: { Chris@16: static std::string name() { return "[Solid Angle]"; } Chris@16: static std::string symbol() { return "[QS]"; } Chris@16: }; Chris@16: Chris@16: } // namespace units Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_UNITS_ABSTRACT_HPP