From 9bd96a1b192ed2fd83e606ea073bd969848619b3 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Wed, 8 Jun 2011 02:12:38 +0200 Subject: [PATCH] time-entities refactoring: Duration isn't an Offset removed that inheritance relation; it was a typical example of abusing inheritance and violated the Liscov substitution principle. It is sufficient to allow promotion of an offset into a Duration. Note: Duration is the time metric --- doc/devel/uml/fig142725.png | Bin 19348 -> 19835 bytes src/lib/time/control.hpp | 6 ++--- src/lib/time/lumitime.cpp | 4 +-- src/lib/time/quantiser.cpp | 2 +- src/lib/time/timevalue.hpp | 40 +++++++++++++++++++++++++---- uml/lumiera/128517 | 19 ++++---------- uml/lumiera/142725.diagram | 50 +++++++++++++++++++----------------- uml/lumiera/5.session | 3 +++ uml/lumiera/lumiera.prj | 2 +- wiki/renderengine.html | 19 +++++++++----- 10 files changed, 88 insertions(+), 57 deletions(-) diff --git a/doc/devel/uml/fig142725.png b/doc/devel/uml/fig142725.png index 6e8c570d81b164a4ab1fc290b50e592f5e7dca80..91c7958764689a72584a4104d39229483dce8765 100644 GIT binary patch literal 19835 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 W>J+|Q0G_r5c_}6*S|F_d{{H~`be&KD diff --git a/src/lib/time/control.hpp b/src/lib/time/control.hpp index 7f257880b..69ae4ec02 100644 --- a/src/lib/time/control.hpp +++ b/src/lib/time/control.hpp @@ -178,7 +178,7 @@ namespace time { static TimeSpan buildChangedValue (TAR& target) { - return TimeSpan (target, Duration::ZERO); /////////////TODO how to feed the "new value" duration???? + return TimeSpan (target, Duration::NIL); /////////////TODO how to feed the "new value" duration???? } }; template<> @@ -327,13 +327,13 @@ namespace time { TimeSpan Mutator::imposeOffset (TimeValue& target, Offset const& off) { - return TimeSpan (Mutation::imposeChange (target, TimeVar(target)+off), Duration::ZERO); + return TimeSpan (Mutation::imposeChange (target, TimeVar(target)+off), Duration::NIL); } template<> TimeSpan Mutator::imposeNudge (TimeValue& target, int off_by_steps) { - return TimeSpan (Mutation::imposeChange (target, TimeVar(target)+Time(FSecs(off_by_steps))), Duration::ZERO); + return TimeSpan (Mutation::imposeChange (target, TimeVar(target)+Time(FSecs(off_by_steps))), Duration::NIL); } diff --git a/src/lib/time/lumitime.cpp b/src/lib/time/lumitime.cpp index 00d3e72b9..978e8190f 100644 --- a/src/lib/time/lumitime.cpp +++ b/src/lib/time/lumitime.cpp @@ -121,12 +121,12 @@ namespace time { /** duration of the given number of frames */ Duration::Duration (ulong count, FrameRate const& fps) - : Offset(TimeValue (count? lumiera_frame_duration (fps/count) : _raw(Duration::NIL))) + : TimeValue (count? lumiera_frame_duration (fps/count) : _raw(Duration::NIL)) { } /** constant to indicate "no duration" */ - const Duration Duration::NIL = Offset(TimeValue(0)); + const Duration Duration::NIL (Time::ZERO); diff --git a/src/lib/time/quantiser.cpp b/src/lib/time/quantiser.cpp index 61103008c..5651df3b2 100644 --- a/src/lib/time/quantiser.cpp +++ b/src/lib/time/quantiser.cpp @@ -200,7 +200,7 @@ namespace time { { Time gt(gridTime); TimeVar timePoint = gt + origin_; - timePoint += gridOffset * raster_; + timePoint += gridOffset * Offset(raster_); return timePoint; } diff --git a/src/lib/time/timevalue.hpp b/src/lib/time/timevalue.hpp index fc5c9d467..5535beed1 100644 --- a/src/lib/time/timevalue.hpp +++ b/src/lib/time/timevalue.hpp @@ -317,24 +317,24 @@ namespace time { * possibility to send a \em Mutation message. */ class Duration - : public Offset + : public TimeValue { /// direct assignment prohibited Duration& operator= (Duration const&); public: Duration (Offset const& distance) - : Offset(distance.abs()) + : TimeValue(distance.abs()) { } explicit Duration (TimeValue const& timeSpec) - : Offset(Offset(timeSpec).abs()) + : TimeValue(Offset(timeSpec).abs()) { } explicit Duration (FSecs const& timeSpan_in_secs) - : Offset(Offset(Time(timeSpan_in_secs)).abs()) + : TimeValue(Offset(Time(timeSpan_in_secs)).abs()) { } Duration (TimeSpan const& interval); @@ -343,7 +343,37 @@ namespace time { static const Duration NIL; void accept (Mutation const&); + + /// Supporting backwards use as offset + Offset operator- () const; + }; + + //-- support using a Duration to build offsets --------------- + + inline Duration + operator+ (Duration const& base, Duration const& toAdd) + { + return Offset(base) + Offset(toAdd); + } + + inline Offset + operator* (int factor, Duration const& dur) + { + return factor * Offset(dur); + } + + inline Offset + operator* (Duration const& dur, int factor) + { + return factor*dur; + } + + inline Offset + Duration::operator- () const + { + return -1 * (*this); + } @@ -495,7 +525,7 @@ namespace time { inline Duration::Duration (TimeSpan const& interval) - : Offset(interval.duration()) + : TimeValue(interval.duration()) { } inline diff --git a/uml/lumiera/128517 b/uml/lumiera/128517 index 21aba95a2..9a4a726c7 100644 --- a/uml/lumiera/128517 +++ b/uml/lumiera/128517 @@ -1,6 +1,6 @@ format 58 "CommonLib" // CommonLib - revision 24 + revision 25 modified_by 5 "hiv" // class settings //class diagram settings @@ -916,12 +916,12 @@ ${inlines} idl_decl "" explicit_switch_type "" - classrelation 210437 // - relation 199557 ---|> + classrelation 215429 // + relation 204293 ---|> a public cpp default "${type}" - classrelation_ref 210437 // - b parent class_ref 172165 // Offset + classrelation_ref 215429 // + b parent class_ref 168709 // TimeValue end end @@ -1074,14 +1074,6 @@ ${inlines} b parent class_ref 168709 // TimeValue end - classrelation 208389 // val () - relation 197509 ---> - a role_name "val" multiplicity "1" protected - cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value}; -" - classrelation_ref 208389 // val () - b multiplicity "*" parent class_ref 134917 // Time - end end class 170501 "QuTimeSpan" @@ -1126,7 +1118,6 @@ ${inlines} classrelation_ref 208645 // b parent class_ref 170629 // TCode end - end class 170757 "Format" diff --git a/uml/lumiera/142725.diagram b/uml/lumiera/142725.diagram index 18a84f06e..57a840345 100644 --- a/uml/lumiera/142725.diagram +++ b/uml/lumiera/142725.diagram @@ -30,11 +30,7 @@ classcanvas 130565 class_ref 169221 // TimeGrid end classcanvas 130949 class_ref 170373 // TimeVar draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default - xyz 114 118 2000 -end -classcanvas 131589 class_ref 170501 // QuTimeSpan - draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default - xyz 103 361 2000 + xyz 170 118 2000 end classcanvas 131973 class_ref 170629 // TCode draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default @@ -54,7 +50,7 @@ classcanvas 133253 class_ref 171013 // CompoundGrid end classcanvas 133509 class_ref 172165 // Offset draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default - xyz 46 118 2000 + xyz 102 118 2000 end classcanvas 135045 class_ref 137093 // Meta draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default @@ -82,6 +78,14 @@ classcanvas 137349 class_ref 173829 // Digxel draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default xyz 191 548 2000 end +classcanvas 138117 class_ref 170501 // QuTimeSpan + draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default + xyz 104 361 2000 +end +textcanvas 138373 "time metric" + xyzwh 97 182 2000 50 13 +textcanvas 138501 "mutable" + xyzwh 178 157 2000 38 13 relationcanvas 128517 relation_ref 195205 // geometry VHV unfixed from ref 128005 z 1999 to point 269 88 @@ -108,22 +112,12 @@ relationcanvas 130821 relation_ref 197253 // end relationcanvas 131077 relation_ref 197381 // geometry VHV - from ref 130949 z 1999 to point 138 88 + from ref 130949 z 1999 to point 194 88 line 131205 z 1999 to point 66 88 line 131333 z 1999 to ref 128261 no_role_a no_role_b no_multiplicity_a no_multiplicity_b end -relationcanvas 131461 relation_ref 197509 // - from ref 130949 z 1999 to ref 128005 - role_a_pos 225 120 3000 no_role_b - multiplicity_a_pos 232 143 3000 multiplicity_b_pos 176 143 3000 -end -relationcanvas 131717 relation_ref 197637 // - from ref 131589 z 1999 to ref 128133 - no_role_a no_role_b - no_multiplicity_a no_multiplicity_b -end relationcanvas 132741 relation_ref 198149 // decenter_end 595 from ref 130181 z 1999 stereotype "<>" xyz 360 413 3000 to ref 132101 @@ -141,13 +135,11 @@ relationcanvas 133381 relation_ref 198405 // no_role_a no_role_b no_multiplicity_a no_multiplicity_b end -relationcanvas 133637 relation_ref 199557 // - from ref 128389 z 1999 to ref 133509 - no_role_a no_role_b - no_multiplicity_a no_multiplicity_b -end relationcanvas 133765 relation_ref 199685 // - from ref 133509 z 1999 to ref 128261 + geometry VHV + from ref 133509 z 1999 to point 122 88 + line 137861 z 1999 to point 66 88 + line 137989 z 1999 to ref 128261 no_role_a no_role_b no_multiplicity_a no_multiplicity_b end @@ -162,7 +154,7 @@ relationcanvas 134661 relation_ref 199941 // geometry VHr from ref 128133 z 1999 to point 66 284 line 134789 z 1999 to ref 128389 - role_a_pos 75 269 3000 no_role_b + role_a_pos 83 270 3000 no_role_b multiplicity_a_pos 52 226 3000 no_multiplicity_b end relationcanvas 135301 relation_ref 200069 // @@ -212,4 +204,14 @@ relationcanvas 137477 relation_ref 201989 // role_a_pos 245 554 3000 no_role_b multiplicity_a_pos 245 573 3000 no_multiplicity_b end +relationcanvas 137733 relation_ref 204293 // + from ref 128389 z 1999 to ref 128261 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +end +relationcanvas 138245 relation_ref 197637 // + from ref 138117 z 1999 to ref 128133 + no_role_a no_role_b + no_multiplicity_a no_multiplicity_b +end end diff --git a/uml/lumiera/5.session b/uml/lumiera/5.session index b61f08080..4e22d4c88 100644 --- a/uml/lumiera/5.session +++ b/uml/lumiera/5.session @@ -42,7 +42,10 @@ open package_ref 128389 // RenderEngine classdiagram_ref 142725 // Time flavours class_ref 134917 // Time + class_ref 168837 // Duration class_ref 169221 // TimeGrid + class_ref 170373 // TimeVar + class_ref 170501 // QuTimeSpan classview_ref 128645 // Service Components classview_ref 128266 // SmartPointers end diff --git a/uml/lumiera/lumiera.prj b/uml/lumiera/lumiera.prj index f1dc5de9f..35fe3a3e2 100644 --- a/uml/lumiera/lumiera.prj +++ b/uml/lumiera/lumiera.prj @@ -1,6 +1,6 @@ format 58 "lumiera" - revision 68 + revision 69 modified_by 5 "hiv" cpp_root_dir "../../src/" diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 2105f0406..1c1558952 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -6870,23 +6870,28 @@ Thus the possibly mutalble time entities get an {{{accept(time::Mutation&)}} Based on this time::Mutation design, we provide a specialised element for dealing with //running time values:// When attached to a target time entity, a "life" connection is established. From then on, continuous changes and mutations can be fed to the target by invoking a functor interface. Besides, a change notification signal (callback) can be installed, which will be invoked on each change. This {{{time::Control}}} element is the foundation for implementing all kinds of running time display widgets, spin buttons, timeline selections, playheads, loop playback and similar. -
+
The term &raquo;Time&laquo; spans a variety of vastly different entities. Within a NLE we get to deal with various //flavours of time values.//
 ;continuous time
 :without any additional assumptions, ''points in time'' can be specified with arbitrary precision.
 :the time values are just numbers; the point of reference and the meaning is implicit.
 :within Lumiera, time is encoded as integral number of //micro ticks,// practically continuous
-;duration
+;time distance
 :a range of time, a ''distance'' on the time axis, measured with the same arbitrary precision as time points.
-:distances and durations can be determined by //subtracting// two time points, consequently they are //signed numbers.//
-:a duration always abstracts from the time //when// this duration or distance happens, the relation to any time scale remains implicit
+:distances can be determined by //subtracting// two time points, consequently they are //signed numbers.//
 ;offset
-:offsetting a time or a duration is an operation (not an entity): it means changing the denoted time point or duration.
-:the //target// of an offset operation is a time or duration, while it's //argument// is a distance (synonymous to duration).
-:Time values are //immutable,// like numbers. Only a ''time variable'' can be changed. Durations to the contrary can be mutable or  const.
+:a distance can be used to adjust (offset) a time or a duration: this means applying a relative change.
+:the //target// of an offset operation is a time or duration, while it's //argument// is a distance (synonymous to offset).
+;duration
+:the length of a time range yields a ''time metric''.
+:the duration can be defined as the //absolute value//&nbsp; of the offset between start and endpoint of the time range.
+:a duration always abstracts from the time //when// this duration or distance happens, the relation to any time scale remains implicit
 ;time span
 :contrary to a mere duration, a ''time interval'' or time span is actually //anchored// at a specific point in time.
 :it can be seen as a //special kind of duration,// which explicitly states the information //when// this time span takes place.
+;changing time
+:Time values are //immutable,// like numbers. Only a ''time variable'' can be changed.
+:yet some of the special time entities can recieve [[mutation messages|TimeMutation]], allowing e.g. for adjustments to a time interval selection from the GUI
 
 ;internal time
 :While the basic continuous time values don't imply any provision regarding the time scale and origin to be used, actually, within the implementation of the application, the meaning of time values is uniform and free of contradictions. Thus effectively there is an ''implementation time scale'' -- but its scope of validity is //strictly limited to the implementation level of a single application instance.// It is never exposed and never persisted. It might not be reproducible over multiple instantiations of the application. The implementation reserves the right to recalibrate this internal scale. Later, when Lumiera gains the capability to run within a network of render nodes, these instance connections will include a negotiation about the internal time scale, which remains completely opaque to the outer world. This explains, why {{{lumiera::Time}}} instances lack the ability to show their time value beyond debugging purposes. This is to avoid confusion and to stress their opaque nature.