1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
// Boost.Units - A C++ library for zero-overhead dimensional analysis and
// unit/quantity manipulation and conversion
//
// Copyright (C) 2003-2008 Matthias Christian Schabel
// Copyright (C) 2008 Steven Watanabe
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef MCS_TEST_SYSTEM_HPP
#define MCS_TEST_SYSTEM_HPP
#include <boost/mpl/list.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/units/base_dimension.hpp>
#include <boost/units/derived_dimension.hpp>
#include <boost/units/io.hpp>
#include <boost/units/quantity.hpp>
#include <boost/units/static_constant.hpp>
#include <boost/units/unit.hpp>
#include <boost/units/base_unit.hpp>
#include <boost/units/make_system.hpp>
namespace boost {
namespace units {
//[test_system_snippet_1
/// base dimension of length
struct length_base_dimension : base_dimension<length_base_dimension,1> { };
/// base dimension of mass
struct mass_base_dimension : base_dimension<mass_base_dimension,2> { };
/// base dimension of time
struct time_base_dimension : base_dimension<time_base_dimension,3> { };
//]
#if 0
//[test_system_snippet_2
typedef make_dimension_list<
boost::mpl::list< dim< length_base_dimension,static_rational<1> > >
>::type length_dimension;
typedef make_dimension_list<
boost::mpl::list< dim< mass_base_dimension,static_rational<1> > >
>::type mass_dimension;
typedef make_dimension_list<
boost::mpl::list< dim< time_base_dimension,static_rational<1> > >
>::type time_dimension;
//]
#endif
//[test_system_snippet_3
typedef length_base_dimension::dimension_type length_dimension;
typedef mass_base_dimension::dimension_type mass_dimension;
typedef time_base_dimension::dimension_type time_dimension;
//]
#if 0
//[test_system_snippet_4
typedef make_dimension_list<
boost::mpl::list< dim< length_base_dimension,static_rational<2> > >
>::type area_dimension;
typedef make_dimension_list<
boost::mpl::list< dim< mass_base_dimension,static_rational<1> >,
dim< length_base_dimension,static_rational<2> >,
dim< time_base_dimension,static_rational<-2> > >
>::type energy_dimension;
//]
#endif
//[test_system_snippet_5
typedef derived_dimension<length_base_dimension,2>::type area_dimension;
typedef derived_dimension<mass_base_dimension,1,
length_base_dimension,2,
time_base_dimension,-2>::type energy_dimension;
//]
namespace test {
//[test_system_snippet_6
struct meter_base_unit : base_unit<meter_base_unit, length_dimension, 1> { };
struct kilogram_base_unit : base_unit<kilogram_base_unit, mass_dimension, 2> { };
struct second_base_unit : base_unit<second_base_unit, time_dimension, 3> { };
typedef make_system<
meter_base_unit,
kilogram_base_unit,
second_base_unit>::type mks_system;
/// unit typedefs
typedef unit<dimensionless_type,mks_system> dimensionless;
typedef unit<length_dimension,mks_system> length;
typedef unit<mass_dimension,mks_system> mass;
typedef unit<time_dimension,mks_system> time;
typedef unit<area_dimension,mks_system> area;
typedef unit<energy_dimension,mks_system> energy;
//]
//[test_system_snippet_7
/// unit constants
BOOST_UNITS_STATIC_CONSTANT(meter,length);
BOOST_UNITS_STATIC_CONSTANT(meters,length);
BOOST_UNITS_STATIC_CONSTANT(kilogram,mass);
BOOST_UNITS_STATIC_CONSTANT(kilograms,mass);
BOOST_UNITS_STATIC_CONSTANT(second,time);
BOOST_UNITS_STATIC_CONSTANT(seconds,time);
BOOST_UNITS_STATIC_CONSTANT(square_meter,area);
BOOST_UNITS_STATIC_CONSTANT(square_meters,area);
BOOST_UNITS_STATIC_CONSTANT(joule,energy);
BOOST_UNITS_STATIC_CONSTANT(joules,energy);
//]
} // namespace test
//[test_system_snippet_8
template<> struct base_unit_info<test::meter_base_unit>
{
static std::string name() { return "meter"; }
static std::string symbol() { return "m"; }
};
//]
template<> struct base_unit_info<test::kilogram_base_unit>
{
static std::string name() { return "kilogram"; }
static std::string symbol() { return "kg"; }
};
template<> struct base_unit_info<test::second_base_unit>
{
static std::string name() { return "second"; }
static std::string symbol() { return "s"; }
};
} // namespace units
} // namespace boost
#endif // MCS_TEST_SYSTEM_HPP
|