Eisuke Kawashima: Thank You. I'll have a look. When I saw Boost.Units did not have imperial and we had to create it ourselves, I thought: the US is s 5 trillion dollar market, most of those markets need programming, all are on imperial. Boost.Units needs imperial and programmers would find and use it. Steven Watanabe: Thank You. This solution doesn't seem correct as it does not consider "length".... boost::units::derived_dimension< boost::units::mass_base_dimension, 1, boost::units::time_base_dimension, -2>::typeI thought I'd at it (L M T^-2 L-1) but this didn't do well.: typedef boost::units::derived_dimension< boost::units::length_base_dimension, 1, boost::units::mass_base_dimension, 1, boost::units::time_base_dimension, -2, boost::units::length_base_dimension, -1 >::type lineal_force_dimension; So, I tried the " typedef boost::mpl::divides<...>" solution as it has force and length. I am closer, I hope. *.h------------------------------------------------------------------------------------------------------------------------------------------ namespace dimensional_analysis { typedef boost::units::length_base_dimension::dimension_type length_dimension; typedef boost::units::mass_base_dimension::dimension_type mass_dimension; typedef boost::units::make_system< boost::units::us::inch_base_unit, boost::units::us::pound_base_unit >::type ip_system; namespace lineal_force { typedef boost::mpl::divides< boost::units::force_dimension, boost::units::length_dimension>::type lineal_force_dimension; namespace imperial { typedef boost::units::unit< lineal_force_dimension, dimensional_analysis ::ip_system > lineal_force_unit; typedef boost::units::quantity<lineal_force_unit, double> pound_per_in_quantity; BOOST_UNITS_STATIC_CONSTANT(pound_per_inch, pound_per_in_quantity); } namespace si { typedef boost::units::unit< lineal_force_dimension, boost::units::si::system > lineal_force_unit; typedef boost::units::quantity<lineal_force_dimension, double> kg_per_meter_quantity; BOOST_UNITS_STATIC_CONSTANT(kg_per_meter, kg_per_meter_quantity); } }//lineal_force }//dimensional_analysis *.cpp------------------------------------------------------------------------------------------------------------------------------------------ BOOST_UNITS_DEFINE_CONVERSION_FACTOR(dimensional_analysis::lineal_force::imperial::lineal_force_unit, dimensional_analysis::lineal_force::si::lineal_force_unit, double, 17.858); // exact conversion BOOST_UNITS_DEFAULT_CONVERSION(dimensional_analysis::lineal_force::imperial::lineal_force_unit, dimensional_analysis::lineal_force::si::lineal_force_unit); BOOST_UNITS_DEFINE_CONVERSION_FACTOR(dimensional_analysis::lineal_force::si::lineal_force_unit, dimensional_analysis::lineal_force::imperial::lineal_force_unit, double, 0.0559974); // exact conversion BOOST_UNITS_DEFAULT_CONVERSION(dimensional_analysis::lineal_force::si::lineal_force_unit, dimensional_analysis::lineal_force::imperial::lineal_force_unit); //This is not converting force/length and is converting si -> imperial mass (only) = 110.2. Needs to consider force/length, =50*0.0559974 auto t1 = static_cast<boost::units::quantity<dimensional_analysis::lineal_force::imperial::lineal_force_unit>>( 50.0 * dimensional_analysis::lineal_force::si::lineal_force_unit::unit_type()); / This is not converting force/length and i sconverting imperial -> si mass (only) = 22.7. Needs to consider force/length, =50*17.858 auto t2 = static_cast<boost::units::quantity<dimensional_analysis::lineal_force::si::lineal_force_unit>>( 50.0 * dimensional_analysis::lineal_force::imperial::lineal_force_unit::unit_type()); //This is again only converting mass and needs to convert force/length const auto t3 = boost::units::conversion_factor( dimensional_analysis::lineal_force::imperial::lineal_force_unit::unit_type(), dimensional_analysis::lineal_force::si::lineal_force_unit::unit_type()); On Monday, November 19, 2018, 12:46:57 PM CST, boost-users-request@lists.boost.org <boost-users-request@lists.boost.org> wrote: Send Boost-users mailing list submissions to boost-users@lists.boost.org To subscribe or unsubscribe via the World Wide Web, visit https://lists.boost.org/mailman/listinfo.cgi/boost-users or, via email, send a message with subject or body 'help' to boost-users-request@lists.boost.org You can reach the person managing the list at boost-users-owner@lists.boost.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Boost-users digest..." Today's Topics: 1. Re: boost::units - converting from one derived_dimension to another across systems (imperial to metric) (Eisuke Kawashima) 2. Re: Fwd: Boost::Filesystem - How to iterate, through the whole drive (Richard Z?vodn?) 3. Re: boost::units - converting from one derived_dimension to another across systems (imperial to metric) (Steven Watanabe) 4. Re: [release] Boost 1.69.0 Beta 1 (Marshall Clow) ---------------------------------------------------------------------- Message: 1 Date: Tue, 20 Nov 2018 02:23:10 +0900 From: Eisuke Kawashima <e.kawaschima+boost@gmail.com> To: boost-users@lists.boost.org Subject: Re: [Boost-users] boost::units - converting from one derived_dimension to another across systems (imperial to metric) Message-ID: <CAHhxtD6A9Jwhv5amKnTa1bmNkD0U4_LGre8ySKFfQXK7w62oEQ@mail.gmail.com> Content-Type: text/plain; charset="UTF-8" Hi list,
I am having trouble converting from one derived_dimension to another across systems (imperial to metric). I'd like to convert, say, lb/in to, say, kg/m. I thought I would do the following but get a compiler error #:
*.h-------------------------------------------------------------------------------- namespace dimensional_analysis { namespace lineal_force { //lb/in typedef boost::units::derived_dimension< boost::units::us::pound_force_base_unit, 1, boost::units::us::inch_base_unit, -1 >::type lb_per_inch_dimension; typedef boost::units::unit< lb_per_inch_dimension, dimensional_analysis::lengths::ip_system > lb_per_inch_unit; typedef boost::units::quantity<lb_per_inch_unit, double> lb_per_inch_quantity; BOOST_UNITS_STATIC_CONSTANT(lbpin, lb_per_inch_quantity); //kg/m typedef boost::units::derived_dimension< boost::units::si::kilogram_base_unit, 1, boost::units::si::meter_base_unit, -1 >::type kg_per_meter_dimension; typedef boost::units::unit< kg_per_meter_dimension, boost::units::si::system > kg_per_meter_unit; typedef boost::units::quantity<kg_per_meter_unit, double> kg_per_meter_unit_quantity; BOOST_UNITS_STATIC_CONSTANT(kgpm, kg_per_meter_unit_quantity); }//lineal_force }//dimensional_analysis
*.cp ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //Do I need these? BOOST_UNITS_DEFINE_CONVERSION_FACTOR(dimensional_analysis::lineal_force::kg_per_meter_unit, dimensional_analysis::lineal_force::lb_per_inch_unit, double, 0.0559974); // exact conversion BOOST_UNITS_DEFAULT_CONVERSION(dimensional_analysis::lineal_force::kg_per_meter_unit, dimensional_analysis::lineal_force::lb_per_inch_unit);
//This does not compile# const auto conv_factor_try0 = conversion_factor(dimensional_analysis::lineal_force::kg_per_meter_unit::unit_type(), dimensional_analysis::lineal_force::lb_per_inch_unit::unit_type());
# *\boost_1_68_0\boost\units\detail\conversion_impl.hpp(340): error C2672: 'conversion_factor': no matching overloaded function found (compiling source file...*.cpp)
Any help is appreciated
I opened a PR (https://github.com/boostorg/units/pull/32) to address such a situation; the following code ```cpp #include <iostream> #include <boost/units/base_units/us/inch.hpp> #include <boost/units/base_units/us/pound_force.hpp> #include <boost/units/io.hpp> #include <boost/units/physical_dimensions.hpp> #include <boost/units/systems/si.hpp> int main() { auto force_us{1.0 * boost::units::us::pound_force}; auto length_us{1.0 * boost::units::us::inch}; boost::units::quantity<boost::units::si::force, double> force_si{force_us}; boost::units::quantity<boost::units::si::length, double> length_si{length_us}; std::cout << force_us << " = " << force_si << '\n'; std::cout << length_us << " = " << length_si << '\n'; std::cout << force_us / length_us << " = " << force_si / length_si << '\n'; return 0; } ``` will print ``` 1 lbf = 4.44822 m kg s^-2 1 in = 0.0254 m 1 lbf in^-1 = 175.127 kg s^-2 ``` Best -- Eisuke Kawashima ------------------------------ Message: 2 Date: Mon, 19 Nov 2018 19:24:58 +0100 From: Richard Z?vodn? <zavodnyrichard@gmail.com> To: degski <degski@gmail.com>, boost-users@lists.boost.org Subject: Re: [Boost-users] Fwd: Boost::Filesystem - How to iterate, through the whole drive Message-ID: <d13622b0-9a68-d109-c26e-b60e3a5c45c8@gmail.com> Content-Type: text/plain; charset="utf-8"; Format="flowed" I just wanna try it again here, maybe somebody will shop up who knows where is the problem as I unfortunately couldn't fix it with degski (but still, thank you for your time :)). His example (can be found below) doesn't work on my system. The problem is I can't start iteration from the drive root (for example E:\), because it will iterate only the directory above (E:\projects\boost\build) the directory that the executable is located in (the executable is located in E:\projects\boost\build\Debug). What is weird that if I move the executable to the different directory (let's say C:\Users\USER_NAME\Downloads) it will still iterate only the build directory. I tried to play with Visual Studio -> PROJECT_NAME -> Properties -> Debugging -> Working Directory, but without a success. According to degski he has the value of this entry set to $(ProjectDir) which is the same value as mine. Thank you. On 11/18/2018 9:04 AM, degski wrote:
On Sun, 18 Nov 2018 at 05:31, Richard Z?vodn? via Boost-users <boost-users@lists.boost.org <mailto:boost-users@lists.boost.org>> wrote:
---------- Forwarded message --------- From: *Richard Z?vodn?* <zavodnyrichard@gmail.com <mailto:zavodnyrichard@gmail.com>> Date: Sat, Nov 17, 2018, 3:59 PM Subject: Boost::Filesystem - How to iterate, through the whole drive To: <boost-users@lists.boost.org <mailto:boost-users@lists.boost.org>>
Hey guys, I need iterate over all directories from starting path. If I start iterating from C:\some-dir it works very well, however if I try to iterate from C:\, it doesn't work. How can iterate through the whole drive? Thank you.
Code is here: https://pastebin.com/mpsKJxH2 <https://pastebin.com/3J6FEMG5>. The problem I experience is commented right in the code section (line 1, 13 and 25).
This works for me, either with boost-1.68 (not that I think that matters) or the STL-VC-15.9.1 (/std:c++17):
#include <iostream> #include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main ( ) { ??? for ( auto & p : fs::recursive_directory_iterator ( "d:\\" ) ) { ??????? std::cout << p.path ( ) << '\n'; ??? } }
Note that: "The iteration order is unspecified, except that each directory entry is visited only once."
degski -- /*/*?*/If something cannot go on forever, it will stop" - Herbert Stein*/