Trax3 3.1.0
trax track library
Loading...
Searching...
No Matches
DimSupportStream.h
1// trax track library
2// AD 2021
3//
4// "My cloth are dirty, but my hands are clean"
5//
6// Bob Dylan
7//
8// Copyright (c) 2025 Trend Redaktions- und Verlagsgesellschaft mbH
9// Copyright (c) 2019 Marc-Michael Horstmann
10//
11// Permission is hereby granted to any person obtaining a copy of this software
12// and associated source code (the "Software"), to use, view, and study the
13// Software for personal or internal business purposes, subject to the following
14// conditions:
15//
16// 1. Redistribution, modification, sublicensing, or commercial use of the
17// Software is NOT permitted without prior written consent from the copyright
18// holder.
19//
20// 2. The Software is provided "AS IS", without warranty of any kind, express
21// or implied.
22//
23// 3. All copies of the Software must retain this license notice.
24//
25// For further information, please contact: horstmann.marc@trendverlag.de
26
27#pragma once
28
29
39
40#include "dim/DimensionedValues.h"
41#include "common/support/CommonSupportStream.h"
42
43#include <cassert>
44#include <istream>
45#include <ostream>
46#include <sstream>
47
48namespace dim
49{
50
51#if defined( _WIN32 )
52# if defined( DIM_STATIC_LIBRARY )
53# define dclspc_dim
54# else
55# if defined( DIM_DLL_LIBRARY )
56# define dclspc_dim __declspec( dllexport )
57# else
58# define dclspc_dim __declspec( dllimport )
59# endif
60# endif
61#else
62# define dclspc_dim
63#endif
64
65 dclspc_dim Real KilogramsPerUnit() noexcept;
66 dclspc_dim Real MetersPerUnit() noexcept;
67 dclspc_dim Real SecondsPerUnit() noexcept;
68
69 inline bool CheckUnits() noexcept{
70 if( kilograms_per_unit != KilogramsPerUnit() )
71 return false;
72 if( meters_per_unit != MetersPerUnit() )
73 return false;
74 if( seconds_per_unit != SecondsPerUnit() )
75 return false;
76
77 return true;
78 }
79
93
96 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<0,0,0>>& one );
97
98 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<0,0,0>>& one );
99
100 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<-1,0,0>>& anglePerLength );
101
102 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<-1,0,0>>& anglePerLength );
103
104 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<1,0,0>>& length );
105
106 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<1,0,0>>& length );
107
108 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<2,0,0>>& area );
109
110 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<2,0,0>>& area );
111
112 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<3,0,0>>& volume );
113
114 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<3,0,0>>& volume );
115
116 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<0,0,1>>& time );
117
118 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<0,0,1>>& time );
119
120 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<0,0,-1>>& angularvelocity );
121
122 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<0,0,-1>>& angularvelocity );
123
124 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<1,0,-1>>& velocity );
125
126 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<1,0,-1>>& velocity );
127
128 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<1,0,-2>>& acceleration );
129
130 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<1,0,-2>>& acceleration );
131
132 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<0,1,0>>& mass );
133
134 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<0,1,0>>& mass );
135
136 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<-3,1,0>>& density );
137
138 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<-3,1,0>>& density );
139
140 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<1,1,-2>>& force );
141
142 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<1,1,-2>>& force );
143
144 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<-1, 1, -2>>& pressure );
145
146 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<-1, 1, -2>>& pressure );
147
148 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<1, 1, -1>>& momentum );
149
150 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<1, 1, -1>>& momentum );
151
152 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<2, 1, -1>>& angularmomentum );
153
154 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<2, 1, -1>>& angularmomentum );
155
156 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<2,1,-2>>& torque );
157
158 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<2,1,-2>>& torque );
159
160 dclspc_dim std::ostream& operator << ( std::ostream& ostr, const Value<Dimension<2,1,-3>>& power );
161
162 dclspc_dim std::istream& operator >> ( std::istream& istr, Value<Dimension<2,1,-3>>& power );
163
164 template<typename A, typename B>
165 std::ostream& operator << ( std::ostream& ostr, const std::pair<A,B>& pair ){
166 ostr << "pair( " << pair.first << ", " << pair.second << " )";
167 return ostr;
168 }
169
170 template<typename A, typename B>
171 std::istream& operator >> ( std::istream& is, std::pair<A,B>& pair )
172 {
173 common::StreamInHead( is, "pair" );
174
175 char c;
176 is >> pair.first;
177 is >> c; assert( c == ',' );
178 is >> pair.second;
179 is >> c; assert( c == ')' );
180 return is;
181 }
182
183 template<typename A, typename B, typename C>
184 std::ostream& operator << ( std::ostream& ostr, const std::tuple<A,B,C>& tuple ){
185 ostr << "tuple( " << std::get<0>( tuple ) << ", " << std::get<1>( tuple ) << ", " << std::get<2>( tuple ) << " )";
186 return ostr;
187 }
188
189 template<typename A, typename B, typename C>
190 std::istream& operator >> ( std::istream& is, std::tuple<A,B,C>& tuple )
191 {
192 common::StreamInHead( is, "tuple" );
193
194 char c;
195 is >> std::get<0>( tuple );
196 is >> c; assert( c == ',' );
197 is >> std::get<1>( tuple );
198 is >> c; assert( c == ',' );
199 is >> std::get<2>( tuple );
200 is >> c; assert( c == ')' );
201 return is;
202 }
203
204
205
209 dclspc_dim std::ostream& _deg( std::ostream& ostr, Angle angle );
210
211 dclspc_dim std::ostream& _deg( std::ostream& ostr );
212
213 dclspc_dim std::ostream& _deg0( std::ostream& ostr, Angle angle );
214
215 dclspc_dim std::ostream& _deg0( std::ostream& ostr );
216
217 dclspc_dim std::ostream& _rad( std::ostream& ostr, Angle angle );
218
219 dclspc_dim std::ostream& _rad( std::ostream& ostr );
220
221 dclspc_dim std::ostream& _Angle( std::ostream& ostr );
222
223
224 dclspc_dim std::ostream& _degIm( std::ostream& ostr, AnglePerLength angleperlength );
225
226 dclspc_dim std::ostream& _degIm( std::ostream& ostr );
227
228 dclspc_dim std::ostream& _degIcm( std::ostream& ostr, AnglePerLength angleperlength );
229
230 dclspc_dim std::ostream& _degIcm( std::ostream& ostr );
231
232 dclspc_dim std::ostream& _1Im( std::ostream& ostr, AnglePerLength angleperlength );
233
234 dclspc_dim std::ostream& _1Im( std::ostream& ostr );
235
236 dclspc_dim std::ostream& _1ILength( std::ostream& ostr );
237
238
239 dclspc_dim std::ostream& _m( std::ostream& ostr, Length length );
240
241 dclspc_dim std::ostream& _m( std::ostream& ostr );
242
243 dclspc_dim std::ostream& _mm( std::ostream& ostr, Length length );
244
245 dclspc_dim std::ostream& _mm( std::ostream& ostr );
246
247 dclspc_dim std::ostream& _cm( std::ostream& ostr, Length length );
248
249 dclspc_dim std::ostream& _cm( std::ostream& ostr );
250
251 dclspc_dim std::ostream& _dm( std::ostream& ostr, Length length );
252
253 dclspc_dim std::ostream& _dm( std::ostream& ostr );
254
255 dclspc_dim std::ostream& _km( std::ostream& ostr, Length length );
256
257 dclspc_dim std::ostream& _km( std::ostream& ostr );
258
259 dclspc_dim std::ostream& _mi( std::ostream& ostr, Length length );
260
261 dclspc_dim std::ostream& _mi( std::ostream& ostr );
262
263 dclspc_dim std::ostream& _nmi( std::ostream& ostr, Length length );
264
265 dclspc_dim std::ostream& _nmi( std::ostream& ostr );
266
267 dclspc_dim std::ostream& _yd( std::ostream& ostr, Length length );
268
269 dclspc_dim std::ostream& _yd( std::ostream& ostr );
270
271 dclspc_dim std::ostream& _ft( std::ostream& ostr, Length length );
272
273 dclspc_dim std::ostream& _ft( std::ostream& ostr );
274
275 dclspc_dim std::ostream& _in( std::ostream& ostr, Length length );
276
277 dclspc_dim std::ostream& _in( std::ostream& ostr );
278
279 dclspc_dim std::ostream& _Length( std::ostream& ostr );
280
281
282 dclspc_dim std::ostream& _cmIs( std::ostream& ostr, Velocity velocity );
283
284 dclspc_dim std::ostream& _cmIs( std::ostream& ostr );
285
286 dclspc_dim std::ostream& _kmIh( std::ostream& ostr, Velocity velocity );
287
288 dclspc_dim std::ostream& _kmIh( std::ostream& ostr );
289
290 dclspc_dim std::ostream& _mIs( std::ostream& ostr, Velocity velocity );
291
292 dclspc_dim std::ostream& _mIs( std::ostream& ostr );
293
294 dclspc_dim std::ostream& _mph( std::ostream& ostr, Velocity velocity );
295
296 dclspc_dim std::ostream& _mph( std::ostream& ostr );
297
298 dclspc_dim std::ostream& _kn( std::ostream& ostr, Velocity velocity );
299
300 dclspc_dim std::ostream& _kn( std::ostream& ostr );
301
302 dclspc_dim std::ostream& _Velocity( std::ostream& ostr );
303
304
305 dclspc_dim std::ostream& _mIs2( std::ostream& ostr, Acceleration acceleration );
306
307 dclspc_dim std::ostream& _mIs2( std::ostream& ostr );
308
309
310 dclspc_dim std::ostream& _g( std::ostream& ostr, Mass mass );
311
312 dclspc_dim std::ostream& _g( std::ostream& ostr );
313
314 dclspc_dim std::ostream& _kg( std::ostream& ostr, Mass mass );
315
316 dclspc_dim std::ostream& _kg( std::ostream& ostr );
317
318 dclspc_dim std::ostream& _t( std::ostream& ostr, Mass mass );
319
320 dclspc_dim std::ostream& _t( std::ostream& ostr );
321
322 dclspc_dim std::ostream& _lb( std::ostream& ostr, Mass mass );
323
324 dclspc_dim std::ostream& _lb( std::ostream& ostr );
325
326 dclspc_dim std::ostream& _oz( std::ostream& ostr, Mass mass );
327
328 dclspc_dim std::ostream& _oz( std::ostream& ostr );
329
330 dclspc_dim std::ostream& _long_tons( std::ostream& ostr, Mass mass );
331
332 dclspc_dim std::ostream& _long_tons( std::ostream& ostr );
333
334 dclspc_dim std::ostream& _short_tons( std::ostream& ostr, Mass mass );
335
336 dclspc_dim std::ostream& _short_tons( std::ostream& ostr );
337
338 dclspc_dim std::ostream& _Mass( std::ostream& ostr );
339
340
341 dclspc_dim std::ostream& _gIcm3( std::ostream& ostr, Density density );
342
343 dclspc_dim std::ostream& _gIcm3( std::ostream& ostr );
344
345 dclspc_dim std::ostream& _kgIm3( std::ostream& ostr, Density density );
346
347 dclspc_dim std::ostream& _kgIm3( std::ostream& ostr );
348
349 dclspc_dim std::ostream& _tIm3( std::ostream& ostr, Density density );
350
351 dclspc_dim std::ostream& _tIm3( std::ostream& ostr );
352
353
354 dclspc_dim std::ostream& _ms( std::ostream& ostr, Time time );
355
356 dclspc_dim std::ostream& _ms( std::ostream& ostr );
357
358 dclspc_dim std::ostream& _s( std::ostream& ostr, Time time );
359
360 dclspc_dim std::ostream& _s( std::ostream& ostr );
361
362
363 dclspc_dim std::ostream& _N( std::ostream& ostr, Force force );
364
365 dclspc_dim std::ostream& _N( std::ostream& ostr );
366
367 dclspc_dim std::ostream& _kN( std::ostream& ostr, Force force );
368
369 dclspc_dim std::ostream& _kN( std::ostream& ostr );
370
371 dclspc_dim std::ostream& _kp( std::ostream& ostr, Force force );
372
373 dclspc_dim std::ostream& _kp( std::ostream& ostr );
374
375 dclspc_dim std::ostream& _lbf( std::ostream& ostr, Force force );
376
377 dclspc_dim std::ostream& _lbf( std::ostream& ostr );
378
379 dclspc_dim std::ostream& _long_tons_force( std::ostream& ostr, Force force );
380
381 dclspc_dim std::ostream& _long_tons_force( std::ostream& ostr );
382
383 dclspc_dim std::ostream& _short_tons_force( std::ostream& ostr, Force force );
384
385 dclspc_dim std::ostream& _short_tons_force( std::ostream& ostr );
386
387 dclspc_dim std::ostream& _Force( std::ostream& ostr );
388
389
390 dclspc_dim std::ostream& _Pa( std::ostream& ostr, Pressure pressure );
391
392 dclspc_dim std::ostream& _Pa( std::ostream& ostr );
393
394 dclspc_dim std::ostream& _kPa( std::ostream& ostr, Pressure pressure );
395
396 dclspc_dim std::ostream& _kPa( std::ostream& ostr );
397
398 dclspc_dim std::ostream& _bar( std::ostream& ostr, Pressure pressure );
399
400 dclspc_dim std::ostream& _bar( std::ostream& ostr );
401
402 dclspc_dim std::ostream& _Pressure( std::ostream& ostr );
403
404
405 dclspc_dim std::ostream& _kgmIs( std::ostream& ostr, Momentum momentum );
406
407 dclspc_dim std::ostream& _kgmIs( std::ostream& ostr );
408
409 dclspc_dim std::ostream& _tmIs( std::ostream& ostr, Momentum momentum );
410
411 dclspc_dim std::ostream& _tmIs( std::ostream& ostr );
412
413
414 dclspc_dim std::ostream& _kgm2Is( std::ostream& ostr, AngularMomentum angularmomentum );
415
416 dclspc_dim std::ostream& _kgm2Is( std::ostream& ostr );
417
418 dclspc_dim std::ostream& _tm2Is( std::ostream& ostr, AngularMomentum angularmomentum );
419
420 dclspc_dim std::ostream& _tm2Is( std::ostream& ostr );
421
422
423 dclspc_dim std::ostream& _Nm( std::ostream& ostr, Torque torque );
424
425 dclspc_dim std::ostream& _Nm( std::ostream& ostr );
426
427 dclspc_dim std::ostream& _kNm( std::ostream& ostr, Torque torque );
428
429 dclspc_dim std::ostream& _kNm( std::ostream& ostr );
430
431 dclspc_dim std::ostream& _Torque( std::ostream& ostr );
432
433 dclspc_dim std::ostream& _W( std::ostream& ostr, Power power );
434
435 dclspc_dim std::ostream& _W( std::ostream& ostr );
436
437 dclspc_dim std::ostream& _kW( std::ostream& ostr, Power power );
438
439 dclspc_dim std::ostream& _kW( std::ostream& ostr );
440
441 dclspc_dim std::ostream& _PS( std::ostream& ostr, Power power );
442
443 dclspc_dim std::ostream& _PS( std::ostream& ostr );
444
445 dclspc_dim std::ostream& _hp( std::ostream& ostr, Power power );
446
447 dclspc_dim std::ostream& _hp( std::ostream& ostr );
448
449 dclspc_dim std::ostream& _Power( std::ostream& ostr );
451
452
455 typedef std::ostream& (*StreamOutAnglePerLength)( std::ostream&, AnglePerLength );
456 typedef std::ostream& (*StreamOutAngle)( std::ostream&, Angle );
457 typedef std::ostream& (*StreamOutLength)( std::ostream&, Length );
458 typedef std::ostream& (*StreamOutVelocity)( std::ostream&, Velocity );
459 typedef std::ostream& (*StreamOutAcceleration)( std::ostream&, Acceleration );
460 typedef std::ostream& (*StreamOutMass)( std::ostream&, Mass );
461 typedef std::ostream& (*StreamOutDensity)( std::ostream&, Density );
462 typedef std::ostream& (*StreamOutTime)( std::ostream&, Time );
463 typedef std::ostream& (*StreamOutForce)( std::ostream&, Force );
464 typedef std::ostream& (*StreamOutPressure)( std::ostream&, Pressure );
465 typedef std::ostream& (*StreamOutMomentum)( std::ostream&, Momentum );
466 typedef std::ostream& (*StreamOutAngularMomentum)( std::ostream&, AngularMomentum );
467 typedef std::ostream& (*StreamOutTorque)( std::ostream&, Torque );
468 typedef std::ostream& (*StreamOutPower)( std::ostream&, Power );
470
473 typedef AnglePerLength (*StreamInAnglePerLength)( Real );
474 typedef Angle (*StreamInAngle)( Real );
475 typedef Length (*StreamInLength)( Real );
476 typedef Velocity (*StreamInVelocity)( Real );
477 typedef Acceleration (*StreamInAcceleration)( Real );
478 typedef Mass (*StreamInMass)( Real );
479 typedef Density (*StreamInDensity)( Real );
480 typedef Time (*StreamInTime)( Real );
481 typedef Force (*StreamInForce)( Real );
482 typedef Pressure (*StreamInPressure)( Real );
483 typedef Momentum (*StreamInMomentum)( Real );
484 typedef AngularMomentum (*StreamInAngularMomentum)( Real );
485 typedef Torque (*StreamInTorque)( Real );
486 typedef Power (*StreamInPower)( Real );
488
496 extern dclspc_dim StreamOutAnglePerLength DefaultStreamOutAnglePerLength;
497 extern dclspc_dim StreamInAnglePerLength DefaultStreamInAnglePerLength;
498 extern dclspc_dim StreamOutAngle DefaultStreamOutAngle;
499 extern dclspc_dim StreamInAngle DefaultStreamInAngle;
500 extern dclspc_dim StreamOutLength DefaultStreamOutLength;
501 extern dclspc_dim StreamInLength DefaultStreamInLength;
502 extern dclspc_dim StreamOutVelocity DefaultStreamOutVelocity;
503 extern dclspc_dim StreamInVelocity DefaultStreamInVelocity;
504 extern dclspc_dim StreamOutAcceleration DefaultStreamOutAcceleration;
505 extern dclspc_dim StreamInAcceleration DefaultStreamInAcceleration;
506 extern dclspc_dim StreamOutMass DefaultStreamOutMass;
507 extern dclspc_dim StreamInMass DefaultStreamInMass;
508 extern dclspc_dim StreamOutDensity DefaultStreamOutDensity;
509 extern dclspc_dim StreamInDensity DefaultStreamInDensity;
510 extern dclspc_dim StreamOutTime DefaultStreamOutTime;
511 extern dclspc_dim StreamInTime DefaultStreamInTime;
512 extern dclspc_dim StreamOutForce DefaultStreamOutForce;
513 extern dclspc_dim StreamInForce DefaultStreamInForce;
514 extern dclspc_dim StreamOutPressure DefaultStreamOutPressure;
515 extern dclspc_dim StreamInPressure DefaultStreamInPressure;
516 extern dclspc_dim StreamOutMomentum DefaultStreamOutMomentum;
517 extern dclspc_dim StreamInMomentum DefaultStreamInMomentum;
518 extern dclspc_dim StreamOutAngularMomentum DefaultStreamOutAngularMomentum;
519 extern dclspc_dim StreamInAngularMomentum DefaultStreamInAngularMomentum;
520 extern dclspc_dim StreamOutTorque DefaultStreamOutTorque;
521 extern dclspc_dim StreamInTorque DefaultStreamInTorque;
522 extern dclspc_dim StreamOutPower DefaultStreamOutPower;
523 extern dclspc_dim StreamInPower DefaultStreamInPower;
525
527 void dclspc_dim SetDefaultStreamOfAnglePerLength( StreamOutAnglePerLength _x = _1Im, StreamInAnglePerLength _y = _1Im ) noexcept;
528 void dclspc_dim SetDefaultStreamOfAngle( StreamOutAngle _x = nullptr, StreamInAngle _y = nullptr ) noexcept;
529 void dclspc_dim SetDefaultStreamOfLength( StreamOutLength _x = _m, StreamInLength _y = _m ) noexcept;
530 void dclspc_dim SetDefaultStreamOfVelocity( StreamOutVelocity _x = _kmIh, StreamInVelocity _y = _kmIh ) noexcept;
531 void dclspc_dim SetDefaultStreamOfMass( StreamOutMass _x = _kg, StreamInMass _y = _kg ) noexcept;
532// void dclspc_dim SetDefaultStreamOfDensity( StreamOutDensity _x = _kgIm3, StreamInDensity _y = _kgIm3 ) noexcept;
533 void dclspc_dim SetDefaultStreamOfTime( StreamOutTime _x = _s, StreamInTime _y = _s ) noexcept;
534 void dclspc_dim SetDefaultStreamOfForce( StreamOutForce _x = _kN, StreamInForce _y = _kN ) noexcept;
535 void dclspc_dim SetDefaultStreamOfPressure( StreamOutPressure _x = _Pa, StreamInPressure _y = _Pa ) noexcept;
536 void dclspc_dim SetDefaultStreamOfTorque( StreamOutTorque _x = _kNm, StreamInTorque _y = _kNm ) noexcept;
537 void dclspc_dim SetDefaultStreamOfPower( StreamOutPower _x = _kW, StreamInPower _y = _kW ) noexcept;
539
541 StreamOutLength dclspc_dim StreamOutLengthFrom( std::string unit );
542 StreamOutAnglePerLength dclspc_dim StreamOutAnglePerLengthFrom( std::string unit );
543 StreamOutVelocity dclspc_dim StreamOutVelocityFrom( std::string unit );
544 StreamOutAcceleration dclspc_dim StreamOutAccelerationFrom( std::string unit );
545 StreamOutMass dclspc_dim StreamOutMassFrom( std::string unit );
546 StreamOutDensity dclspc_dim StreamOutDensityFrom( std::string unit );
547 StreamOutForce dclspc_dim StreamOutForceFrom( std::string unit );
548 StreamOutPressure dclspc_dim StreamOutPressureFrom( std::string unit );
549 StreamOutMomentum dclspc_dim StreamOutMomentumFrom( std::string unit );
550 StreamOutAngularMomentum dclspc_dim StreamOutAngularMomentumFrom( std::string unit );
551 StreamOutTorque dclspc_dim StreamOutTorqueFrom( std::string unit );
552 StreamOutPower dclspc_dim StreamOutPowerFrom( std::string unit );
554
556 StreamInAnglePerLength dclspc_dim StreamInAnglePerLengthFrom( std::string unit );
557 StreamInAngle dclspc_dim StreamInAngleFrom( std::string unit );
558 StreamInLength dclspc_dim StreamInLengthFrom( std::string unit );
559 StreamInVelocity dclspc_dim StreamInVelocityFrom( std::string unit );
560 StreamInAcceleration dclspc_dim StreamInAccelerationFrom( std::string unit );
561 StreamInMass dclspc_dim StreamInMassFrom( std::string unit );
562 StreamInDensity dclspc_dim StreamInDensityFrom( std::string unit );
563 StreamInTime dclspc_dim StreamInTimeFrom( std::string unit );
564 StreamInForce dclspc_dim StreamInForceFrom( std::string unit );
565 StreamInPressure dclspc_dim StreamInPressureFrom( std::string unit );
566 StreamInMomentum dclspc_dim StreamInMomentumFrom( std::string unit );
567 StreamInAngularMomentum dclspc_dim StreamInAngularMomentumFrom( std::string unit );
568 StreamInTorque dclspc_dim StreamInTorqueFrom( std::string unit );
569 StreamInPower dclspc_dim StreamInPowerFrom( std::string unit );
571
573 template<int L,int M,int T>
574 struct smanip{
575 std::ostream& (*f)( std::ostream&, Value<Dimension<L,M,T>> );
577 smanip( std::ostream& (*_f)( std::ostream&, Value<Dimension<L,M,T>> ), Value<Dimension<L,M,T>> _dvalue )
578 : f{_f}, dvalue{_dvalue}
579 {}
580 };
581
582 template<int L,int M,int T> inline
583 std::ostream& operator << ( std::ostream& ostr, const smanip<L,M,T>& m ){
584 m.f(ostr,m.dvalue);
585 return ostr;
586 }
587
588 template<int L,int M,int T> inline
589 smanip<L,M,T> as( std::ostream& (*f)( std::ostream&, Value<Dimension<L,M,T>> ), Value<Dimension<L,M,T>> dvalue ){
590 return smanip<L,M,T>{f,dvalue};
591 }
593
594
596 template<int L,int M,int T>
598 public:
599 typedef Value<Dimension<L,M,T>> (*StreamInDimension)( Real );
600 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
601
602 static StreamInDimension& GetDefaultStreamInDimension();
603
604 static StreamInDimensionFrom GetStreamInDimensionFrom();
605 };
606
607 template<>
608 class DefaultUnit<-1,0,0>{
609 public:
610 typedef Value<Dimension<-1,0,0>> (*StreamInDimension)( Real );
611 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
612
613 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
614 return DefaultStreamInAnglePerLength;
615 }
616
617 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
618 return StreamInAnglePerLengthFrom;
619 }
620
621 };
622
623 template<>
624 class DefaultUnit<1,0,0>{
625 public:
626 typedef Value<Dimension<1,0,0>> (*StreamInDimension)( Real );
627 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
628
629 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
630 return DefaultStreamInLength;
631 }
632
633 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
634 return StreamInLengthFrom;
635 }
636
637 };
638
639 template<>
640 class DefaultUnit<1,0,-1>{
641 public:
642 typedef Value<Dimension<1,0,-1>> (*StreamInDimension)( Real );
643 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
644
645 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
646 return DefaultStreamInVelocity;
647 }
648
649 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
650 return StreamInVelocityFrom;
651 }
652
653 };
654
655 template<>
656 class DefaultUnit<0,1,0>{
657 public:
658 typedef Value<Dimension<0,1,0>> (*StreamInDimension)( Real );
659 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
660
661 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
662 return DefaultStreamInMass;
663 }
664
665 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
666 return StreamInMassFrom;
667 }
668 };
669
670 template<>
671 class DefaultUnit<0,0,1>{
672 public:
673 typedef Value<Dimension<0,0,1>> (*StreamInDimension)( Real );
674 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
675
676 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
677 return DefaultStreamInTime;
678 }
679
680 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
681 return StreamInTimeFrom;
682 }
683 };
684
685 template<>
686 class DefaultUnit<1,1,-2>{
687 public:
688 typedef Value<Dimension<1,1,-2>> (*StreamInDimension)( Real );
689 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
690
691 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
692 return DefaultStreamInForce;
693 }
694
695 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
696 return StreamInForceFrom;
697 }
698 };
699
700 template<>
701 class DefaultUnit<-1,1,-2>{
702 public:
703 typedef Value<Dimension<-1,1,-2>> (*StreamInDimension)( Real );
704 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
705
706 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
707 return DefaultStreamInPressure;
708 }
709
710 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
711 return StreamInPressureFrom;
712 }
713 };
714
715 template<>
716 class DefaultUnit<2,1,-2>{
717 public:
718 typedef Value<Dimension<2,1,-2>> (*StreamInDimension)( Real );
719 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
720
721 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
722 return DefaultStreamInTorque;
723 }
724
725 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
726 return StreamInTorqueFrom;
727 }
728 };
729
730 template<>
731 class DefaultUnit<2,1,-3>{
732 public:
733 typedef Value<Dimension<2,1,-3>> (*StreamInDimension)( Real );
734 typedef StreamInDimension (*StreamInDimensionFrom)( std::string );
735
736 static StreamInDimension& GetDefaultStreamInDimension() noexcept{
737 return DefaultStreamInPower;
738 }
739
740 static StreamInDimensionFrom GetStreamInDimensionFrom() noexcept{
741 return StreamInPowerFrom;
742 }
743 };
744
745
746
747 template<int L,int M,int T>
748 std::string to_string( Value<Dimension<L,M,T>> val ){
749 std::ostringstream stream;
750 stream << val;
751 return stream.str();
752 }
753
754 dclspc_dim std::string to_string_deg( Angle val );
755 dclspc_dim std::string to_string_deg0( Angle val );
756 dclspc_dim std::string to_string_degIm( AnglePerLength val );
757 dclspc_dim std::string to_string_degIcm( AnglePerLength val );
758
759 template<class DimValtype>
760 DimValtype sto( std::string str ){
761 std::istringstream stream{ str };
762 DimValtype retval{0};
763 for( DimValtype value; stream >> value; retval += value )
764 ;
765 return retval;
766 }
767
768 template<class DimValtype>
769 DimValtype sto_noexcept( std::string str ) noexcept{
770 try{
771 return sto<DimValtype>( str );
772 }
773 catch( ... ){
774 return DimValtype{0};
775 }
776 }
777
778 template<class DimValtypeFirst,class DimValtypeSecond>
779 std::pair<DimValtypeFirst,DimValtypeSecond> sto( std::string str, char delimiter = ',' ){
780 std::istringstream stream{ str };
781 std::string token;
782 std::getline( stream, token, delimiter );
783 DimValtypeFirst first = sto<DimValtypeFirst>(token);
784 std::getline( stream, token, delimiter );
785 DimValtypeSecond second = sto<DimValtypeSecond>( token );
786 return std::make_pair( first, second );
787 }
788
789 //extern template dclspc_dim One sto_noexcept( std::string str ) noexcept;
791 //extern template dclspc_dim AnglePerLength sto_noexcept( std::string str ) noexcept;
792 //extern template dclspc_dim AngularVelocity sto_noexcept( std::string str ) noexcept;
793 //extern template dclspc_dim Length sto_noexcept( std::string str ) noexcept;
794 //extern template dclspc_dim Area sto_noexcept( std::string str ) noexcept;
795 //extern template dclspc_dim Volume sto_noexcept( std::string str ) noexcept;
796 //extern template dclspc_dim Mass sto_noexcept( std::string str ) noexcept;
797 //extern template dclspc_dim Density sto_noexcept( std::string str ) noexcept;
798 //extern template dclspc_dim Time sto_noexcept( std::string str ) noexcept;
799 //extern template dclspc_dim Velocity sto_noexcept( std::string str ) noexcept;
800 //extern template dclspc_dim Acceleration sto_noexcept( std::string str ) noexcept;
801 //extern template dclspc_dim Force sto_noexcept( std::string str ) noexcept;
802 //extern template dclspc_dim Pressure sto_noexcept( std::string str ) noexcept;
803 //extern template dclspc_dim Momentum sto_noexcept( std::string str ) noexcept;
804 //extern template dclspc_dim AngularMomentum sto_noexcept( std::string str ) noexcept;
806 //extern template dclspc_dim Energy sto_noexcept( std::string str ) noexcept;
807 //extern template dclspc_dim Power sto_noexcept( std::string str ) noexcept;
808
809} //namespace dim
Definition DimSupportStream.h:597
Value type, dependend from dimensions.
Definition DimensionedValues.h:233
dclspc_dim std::istream & operator>>(std::istream &istr, Value< Dimension< 0, 0, 0 > > &one)
Streams Dimensionated value.
dclspc_dim std::ostream & operator<<(std::ostream &ostr, const Value< Dimension< 0, 0, 0 > > &one)
Streams Dimensionated value.
The namespace provides classes and methods for the dim library.
Definition DimensionedValues.h:178
constexpr Real meters_per_unit
How many meters will make up one unit.
Definition DimensionedValues.h:197
constexpr Real _t(Mass m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1459
constexpr Real _kn(Velocity v) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1419
constexpr Real kilograms_per_unit
How many kilograms will make up one unit.
Definition DimensionedValues.h:196
Value< Dimension< 2, 1, -1 > > AngularMomentum
Angular momentum.
Definition DimensionedValues.h:336
constexpr Real _rad(Angle a) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1202
constexpr Real _kgmIs(Momentum m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1623
constexpr Real _Pa(Pressure p) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1599
constexpr Real _mph(Velocity v) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1411
constexpr Real _s(Time t) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1535
constexpr Real _kN(Force f) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1559
Value< Dimension< 1, 0, -1 > > Velocity
Velocity.
Definition DimensionedValues.h:331
constexpr Real _1Im(AnglePerLength a) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1347
Value< Dimension< 1, 0, 0 > > Length
Length.
Definition DimensionedValues.h:324
constexpr Real _kW(Power p) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1679
Value< Dimension< 0, 1, 0 > > Mass
Mass.
Definition DimensionedValues.h:327
constexpr Real _degIcm(AnglePerLength a) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1371
constexpr Real _dm(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1235
constexpr Real _nmi(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1259
Value< Dimension< 0, 0, 1 > > Time
Time.
Definition DimensionedValues.h:329
constexpr Real _mi(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1251
constexpr Real _kgIm3(Density d) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1507
constexpr Real _kmIh(Velocity v) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1403
constexpr Real _kgm2Is(AngularMomentum am) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1639
constexpr Real _ms(Time t) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1523
Value< Dimension<-1, 1, -2 > > Pressure
Pressure.
Definition DimensionedValues.h:334
constexpr Real _cmIs(Velocity v) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1387
constexpr Real _m(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1210
constexpr Real _ft(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1275
constexpr Real _tmIs(Momentum m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1631
constexpr Real _short_tons_force(Force f) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1591
constexpr Real _N(Force f) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1551
Value< Dimension< 1, 0, -2 > > Acceleration
Acceleration.
Definition DimensionedValues.h:332
constexpr Real seconds_per_unit
How many seconds will make up one unit.
Definition DimensionedValues.h:198
constexpr Real _lb(Mass m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1467
constexpr Real _kNm(Torque t) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1663
Value< Dimension< 1, 1, -2 > > Force
Force.
Definition DimensionedValues.h:333
constexpr Real _mm(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1218
constexpr Real _in(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1283
constexpr Real _kg(Mass m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1443
Value< Dimension<-1, 0, 0 > > AnglePerLength
Angle per length.
Definition DimensionedValues.h:321
Value< Dimension<-3, 1, 0 > > Density
Density.
Definition DimensionedValues.h:328
float Real
Underlying floating point type to be used with the dim library.
Definition DimensionedValues.h:190
constexpr Real _kp(Force f) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1567
Value< Dimension< 2, 1, -2 > > Torque
Torque.
Definition DimensionedValues.h:337
Value< Dimension< 2, 1, -3 > > Power
Power.
Definition DimensionedValues.h:339
constexpr Real _bar(Pressure p) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1615
constexpr Real _tIm3(Density d) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1515
constexpr Real _long_tons(Mass m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1483
constexpr Real _deg(Angle a) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1194
dclspc_dim std::string to_string_deg0(Angle val)
<
constexpr Real _PS(Power p) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1687
constexpr Real _hp(Power p) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1695
constexpr Real _W(Power p) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1671
constexpr Real _kPa(Pressure p) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1607
Value< Dimension< 0, 0, 0 > > Angle
Angle in radians.
Definition DimensionedValues.h:320
Value< Dimension< 1, 1, -1 > > Momentum
Momentum.
Definition DimensionedValues.h:335
constexpr Real _km(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1243
constexpr Real _mIs(Velocity v) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1395
constexpr Real _lbf(Force f) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1575
constexpr Real _degIm(AnglePerLength a) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1363
constexpr Real _g(Mass m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1451
constexpr Real _oz(Mass m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1475
constexpr Real _short_tons(Mass m) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1491
dclspc_dim std::string to_string_degIm(AnglePerLength val)
<
constexpr Real _mIs2(Acceleration a) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1427
constexpr Real _long_tons_force(Force f) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1583
constexpr Real _tm2Is(AngularMomentum am) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1647
constexpr Real _yd(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1267
constexpr Real _cm(Length l) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1226
constexpr Real _gIcm3(Density d) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1499
constexpr Real _Nm(Torque t) noexcept
Dimensionated Values conversion functions.
Definition DimensionedValues.h:1655
STL namespace.
Type selection for class Value.
Definition DimensionedValues.h:224
Definition DimSupportStream.h:574