X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Fsrc%2Fsynfig%2Fnode.cpp;h=182483ca8c65cef22e34adfae22cd4e18ddb7ebd;hb=e6b894ac0b503008a3e42049aed30d116db28630;hp=652410947a8bf0131cd2a7fc8538ba1375ad6ac1;hpb=a095981e18cc37a8ecc7cd237cc22b9c10329264;p=synfig.git diff --git a/synfig-core/src/synfig/node.cpp b/synfig-core/src/synfig/node.cpp index 6524109..182483c 100644 --- a/synfig-core/src/synfig/node.cpp +++ b/synfig-core/src/synfig/node.cpp @@ -62,21 +62,21 @@ using namespace synfig; #define BE_FRUGAL_WITH_GUIDS 1 #ifndef __sys_clock -#ifndef _WIN32 -# include -# define __sys_clock ::clock -#else -# ifdef __GNUG__ -# include -# define __sys_clock ::clock -# else -typedef int clock_t; -extern clock_t _clock(); -# define CLOCKS_PER_SEC 1000 -# define __sys_clock _clock -# endif -#endif -#endif + #ifndef _WIN32 + # include + # define __sys_clock ::clock + #else + # ifdef __GNUG__ + # include + # define __sys_clock ::clock + # else + typedef int clock_t; + extern clock_t _clock(); + # define CLOCKS_PER_SEC 1000 + # define __sys_clock _clock + # endif // __GNUG__ + #endif // _WIN_32 +#endif // __sys_clock /* === G L O B A L S ======================================================= */ @@ -86,6 +86,7 @@ typedef HASH_MAP_CLASS GlobalNodeMap; typedef map GlobalNodeMap; #endif +//! A map to store all the GUIDs with a pointer to the Node. static GlobalNodeMap* global_node_map_; static GlobalNodeMap& global_node_map() @@ -127,15 +128,20 @@ TimePoint::c_str()const void TimePoint::absorb(const TimePoint& x) { + //! If the Time Point to absorb is itself then bail out if(get_guid()==x.get_guid()) return; + //! Creates a new GUID with the old and the new one using XOR operator set_guid(get_guid()^x.get_guid()); - + //! If the current before/after interpolation is NIL use the interpolation + //! provided by the TimePoint to absorb if(get_after()==INTERPOLATION_NIL) set_after(x.get_after()); if(get_before()==INTERPOLATION_NIL) set_before(x.get_before()); - + //! If the interpolation of the Time Point to absorb is not the same + //! than the interpolation from the Time Point to absorb then + //! use UNDEFINED interpolation if(get_after()!=x.get_after() && x.get_after()!=INTERPOLATION_NIL) set_after(INTERPOLATION_UNDEFINED); if(get_before()!=x.get_before() && x.get_before()!=INTERPOLATION_NIL) @@ -145,29 +151,21 @@ TimePoint::absorb(const TimePoint& x) TimePointSet::iterator TimePointSet::insert(const TimePoint& x) { + //! finds a iterator to a Time Point with the same time + //! \see inline bool operator==(const TimePoint& lhs,const TimePoint& rhs) iterator iter(find(x)); + //! If iter is not a the end of the set (we found one Time Point) if(iter!=end()) { + //! Absorb the time point const_cast(*iter).absorb(x); return iter; } + //! Else, insert it at the first of the set return std::set::insert(x).first; } - - - - - - - - - - - - - Node::Node(): guid_(0), bchanged(true),