Boost logo

Boost :

From: Andy Little (andy_at_[hidden])
Date: 2006-08-18 03:47:00


"Eric Lemings" <lemings_at_[hidden]> wrote in message
> In the Units library, the default value type is (currently) double
> and the semantics of all arithmetic operations are based on this
> built-in type. No assumptions are made about semantics, only that
> the required operations exist for ValueType.
>
> What is the default value type in Quan? I'm guessing it has
> something to do with a united value or some other manipulation
> of value semantics within Quan?

You can choose the value_type :

#include <quan/length.hpp>

///////NEW!!
//only available in the two_param-branch CVS version of Quan
#include <boost/numeric/interval.hpp>
#include <quan_matters/test/utility/boost_interval.hpp>
#include <boost/numeric/interval/io.hpp>
//////////////////

#include <iostream>
#include <cassert>
#include <boost/typeof/typeof.hpp>
#include <boost/type_traits/is_same.hpp>

int main()
 {
    std::cout.precision(32);

  quan::length::ft qft(3.0);
  std::cout << "quan qft.numeric_value() = "<< qft.numeric_value() << '\n';
  assert((boost::is_same<BOOST_TYPEOF(qft.numeric_value()),double>::value));
  assert(qft.numeric_value() ==3.0);

  quan::length_<float>::ft qft1(3.0f);
  std::cout << "quan qft1.numeric_value() = "<< qft1.numeric_value() << '\n';
  assert( (boost::is_same<BOOST_TYPEOF(qft1.numeric_value()),float>::value));
  assert(qft1.numeric_value() ==3.0f);

  quan::length_<int>::ft qft2(3);
  std::cout << "quan qft2.numeric_value() = "<< qft2.numeric_value() << '\n';
  assert((boost::is_same<BOOST_TYPEOF(qft2.numeric_value()),int>::value));
  assert(qft2.numeric_value() ==3);

  quan::length_<long>::ft qft3(3L);
  std::cout << "quan qft3.numeric_value() = "<< qft3.numeric_value() << '\n';
  assert((boost::is_same<BOOST_TYPEOF(qft3.numeric_value()),long>::value));
  assert(qft3.numeric_value() ==3L);

  quan::length_<unsigned long>::ft qft4(3UL);
  std::cout << "quan qft4.numeric_value() = "<< qft4.numeric_value() << '\n';
  assert((boost::is_same<BOOST_TYPEOF(qft4.numeric_value()),unsigned
long>::value));
  assert(qft4.numeric_value() ==3UL);

  quan::length_<signed char>::ft qft5('3');
  std::cout << "quan qft5.numeric_value() = "<< qft5.numeric_value() << '\n';
  assert((boost::is_same<BOOST_TYPEOF(qft5.numeric_value()),signed
char>::value));
  assert(qft5.numeric_value() == '3');

  quan::length_<unsigned char>::ft qft6('3');
  std::cout << "quan qft6.numeric_value() = "<< qft6.numeric_value() << '\n';
  assert((boost::is_same<BOOST_TYPEOF(qft6.numeric_value()),unsigned
char>::value));
  assert(qft6.numeric_value() == '3');

  quan::length_<bool>::ft qft7(true);
  std::cout << "quan qft7.numeric_value() = " << std::boolalpha <<
qft7.numeric_value() << '\n';
  assert((boost::is_same<BOOST_TYPEOF(qft7.numeric_value()),bool>::value));
  assert(qft7.numeric_value() == true);

//only available in the two_param-branch CVS version of Quan
  quan::length_<boost::numeric::interval<double> >::ft
qft8(boost::numeric::interval<double> (3.));
  std::cout << "quan qft8.numeric_value() = " << qft8.numeric_value() <<'\n';
  assert((boost::is_same<BOOST_TYPEOF(qft8.numeric_value()),boost::numeric::interval<double>
>::value));
  assert((qft8.numeric_value() == boost::numeric::interval<double> (3.)));
//
}
output:

E:\projects\Test>testgcc
quan qft.numeric_value() = 3
quan qft1.numeric_value() = 3
quan qft2.numeric_value() = 3
quan qft3.numeric_value() = 3
quan qft4.numeric_value() = 3
quan qft5.numeric_value() = 3
quan qft6.numeric_value() = 3
quan qft7.numeric_value() = true
quan qft8.numeric_value() = [3,3]

E:\projects\Test>
----------------------

regards
Andy Little


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk