Upgrade: simplify comparisons
Now able to remove most complicated comparison operators and most usages of boost::operators... In most cases it is sufficient just to define one ''spaceship operator'', and often even that one can be synthesised. However — we still use boost::operators for arithmetic types, notably the `lib::time::TimeValue`, which is addable and mutipliable
This commit is contained in:
parent
bad4827b34
commit
b6a39fa831
16 changed files with 507 additions and 169 deletions
|
|
@ -21,7 +21,7 @@
|
||||||
**
|
**
|
||||||
** This header is intended to be incorporated as part of the advice system implementation (advice.cpp).
|
** This header is intended to be incorporated as part of the advice system implementation (advice.cpp).
|
||||||
** It is \em not usable as an external interface. But it is written in a rather self-contained manner,
|
** It is \em not usable as an external interface. But it is written in a rather self-contained manner,
|
||||||
** in order to be testable in isolation. To this end, the actual PointOfAdvice entities being organised
|
** in order to be testable in isolation. To this end, the actual PointOfAdvice entities \a POA organised
|
||||||
** by this index datastructure remain abstract (defined as template parameter), and are only manipulated
|
** by this index datastructure remain abstract (defined as template parameter), and are only manipulated
|
||||||
** through the following functions:
|
** through the following functions:
|
||||||
** - \c hash_value(POA)
|
** - \c hash_value(POA)
|
||||||
|
|
@ -87,7 +87,6 @@
|
||||||
#include "lib/util.hpp"
|
#include "lib/util.hpp"
|
||||||
#include "common/advice/binding.hpp"
|
#include "common/advice/binding.hpp"
|
||||||
|
|
||||||
#include <boost/operators.hpp>
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
@ -122,6 +121,7 @@ namespace advice {
|
||||||
* by invoking the \c setSolution() function on the
|
* by invoking the \c setSolution() function on the
|
||||||
* corresponding PointOfAdvice entity.
|
* corresponding PointOfAdvice entity.
|
||||||
*
|
*
|
||||||
|
* @tparam POA _point-of-advice_ exposing a matcher and solution
|
||||||
* @note element \em identity is defined in terms of pointing
|
* @note element \em identity is defined in terms of pointing
|
||||||
* to the same memory location of a POA (point of advice).
|
* to the same memory location of a POA (point of advice).
|
||||||
* Thus e.g. #hasProvision means this index holds an entry
|
* Thus e.g. #hasProvision means this index holds an entry
|
||||||
|
|
@ -141,12 +141,8 @@ namespace advice {
|
||||||
class Index
|
class Index
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
struct Entry
|
struct Entry
|
||||||
: pair<Binding::Matcher, POA*>
|
: pair<Binding::Matcher, POA*>
|
||||||
, boost::equality_comparable<Entry, POA,
|
|
||||||
boost::equality_comparable<Entry>
|
|
||||||
>
|
|
||||||
{
|
{
|
||||||
explicit
|
explicit
|
||||||
Entry (POA& elm)
|
Entry (POA& elm)
|
||||||
|
|
|
||||||
|
|
@ -76,9 +76,9 @@
|
||||||
#include "lib/util.hpp"
|
#include "lib/util.hpp"
|
||||||
|
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <boost/operators.hpp>
|
|
||||||
#include <memory>
|
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
|
#include <compare>
|
||||||
|
#include <memory>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
@ -136,6 +136,8 @@ namespace lumiera {
|
||||||
: kind(k)
|
: kind(k)
|
||||||
, type(t)
|
, type(t)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
auto operator<=> (QueryID const&) const =default;
|
||||||
};
|
};
|
||||||
|
|
||||||
QueryID const&
|
QueryID const&
|
||||||
|
|
@ -185,26 +187,6 @@ namespace lumiera {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
inline bool
|
|
||||||
operator< (Goal::QueryID const& id1, Goal::QueryID const& id2)
|
|
||||||
{
|
|
||||||
return id1.kind < id2.kind
|
|
||||||
or(id1.kind == id2.kind and id1.type < id2.type);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool
|
|
||||||
operator== (Goal::QueryID const& id1, Goal::QueryID const& id2)
|
|
||||||
{
|
|
||||||
return id1.kind == id2.kind
|
|
||||||
and id1.type == id2.type;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool
|
|
||||||
operator!= (Goal::QueryID const& id1, Goal::QueryID const& id2)
|
|
||||||
{
|
|
||||||
return not (id1 == id2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
@ -386,7 +368,6 @@ namespace lumiera {
|
||||||
* Implicitly convertible to and from Query instances.
|
* Implicitly convertible to and from Query instances.
|
||||||
*/
|
*/
|
||||||
class QueryKey
|
class QueryKey
|
||||||
: boost::totally_ordered<QueryKey>
|
|
||||||
{
|
{
|
||||||
Goal::QueryID id_;
|
Goal::QueryID id_;
|
||||||
lib::QueryText def_;
|
lib::QueryText def_;
|
||||||
|
|
@ -442,21 +423,19 @@ namespace lumiera {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
friend bool
|
friend std::strong_ordering
|
||||||
operator< (QueryKey const& q1, QueryKey const& q2)
|
operator<=> (QueryKey const& q1, QueryKey const& q2)
|
||||||
{
|
{
|
||||||
uint d1 = q1.degree();
|
uint d1 = q1.degree();
|
||||||
uint d2 = q2.degree();
|
uint d2 = q2.degree();
|
||||||
return d1 < d2
|
if (auto o1 = d1 <=> d2; o1 != 0)
|
||||||
or(d1 == d2 and ( q1.def_ < q2.def_
|
return o1;
|
||||||
or (q1.def_ == q2.def_ and q1.id_ < q2.id_)));
|
if (auto o2 = q1.def_ <=> q2.def_; o2 != 0)
|
||||||
}
|
return o2;
|
||||||
|
else
|
||||||
friend bool
|
return q1.id_ <=> q2.id_;
|
||||||
operator== (QueryKey const& q1, QueryKey const& q2)
|
|
||||||
{
|
|
||||||
return q1.def_ == q2.def_;
|
|
||||||
}
|
}
|
||||||
|
bool operator== (QueryKey const&) const =default;
|
||||||
|
|
||||||
friend size_t
|
friend size_t
|
||||||
hash_value (QueryKey const& q)
|
hash_value (QueryKey const& q)
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@
|
||||||
** @deprecated 10/2024 seems very likely that similar functionality moves down
|
** @deprecated 10/2024 seems very likely that similar functionality moves down
|
||||||
** into the render-engine implementation and will no longer be considered
|
** into the render-engine implementation and will no longer be considered
|
||||||
** a constituent of the public interface.
|
** a constituent of the public interface.
|
||||||
|
** @todo 6/2025 basically everything here is unused or will likely be done
|
||||||
|
** in a different way — expect this and rendergraph.cpp to be obsolete
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -31,7 +33,8 @@
|
||||||
#define LUMIERA_FRAMEID_H
|
#define LUMIERA_FRAMEID_H
|
||||||
|
|
||||||
|
|
||||||
#include <boost/operators.hpp>
|
#include "lib/integral.hpp"
|
||||||
|
#include <compare>
|
||||||
|
|
||||||
namespace lumiera {
|
namespace lumiera {
|
||||||
|
|
||||||
|
|
@ -73,15 +76,14 @@ namespace lumiera {
|
||||||
* later on define what is actually needed; this header should then
|
* later on define what is actually needed; this header should then
|
||||||
* be replaced by a combined C/C++ header
|
* be replaced by a combined C/C++ header
|
||||||
*/
|
*/
|
||||||
class FrameID : boost::totally_ordered<FrameID> ////////////TODO it seems we don't need total ordering, only comparison. Clarify this!
|
class FrameID
|
||||||
{
|
{
|
||||||
long dummy;
|
long dummy;
|
||||||
public:
|
public:
|
||||||
FrameID(long dum=0) : dummy(dum) {}
|
FrameID(long dum=0) : dummy(dum) {}
|
||||||
operator long () { return dummy; }
|
operator long () { return dummy; }
|
||||||
|
|
||||||
bool operator< (const FrameID& other) const { return dummy < other.dummy; }
|
auto operator<=> (FrameID const&) const =default;
|
||||||
bool operator== (const FrameID& other) const { return dummy == other.dummy; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@
|
||||||
#include "lib/util.hpp"
|
#include "lib/util.hpp"
|
||||||
|
|
||||||
#include <boost/functional/hash.hpp>
|
#include <boost/functional/hash.hpp>
|
||||||
#include <boost/operators.hpp>
|
#include <compare>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -131,7 +131,6 @@ namespace idi {
|
||||||
* for building a combined hash and symbolic ID.
|
* for building a combined hash and symbolic ID.
|
||||||
*/
|
*/
|
||||||
class BareEntryID
|
class BareEntryID
|
||||||
: public boost::equality_comparable<BareEntryID>
|
|
||||||
{
|
{
|
||||||
|
|
||||||
string symbol_;
|
string symbol_;
|
||||||
|
|
@ -217,7 +216,6 @@ namespace idi {
|
||||||
template<class TY>
|
template<class TY>
|
||||||
struct EntryID
|
struct EntryID
|
||||||
: BareEntryID
|
: BareEntryID
|
||||||
, boost::totally_ordered< EntryID<TY> >
|
|
||||||
{
|
{
|
||||||
|
|
||||||
/** case-1: auto generated symbolic ID */
|
/** case-1: auto generated symbolic ID */
|
||||||
|
|
@ -272,15 +270,17 @@ namespace idi {
|
||||||
explicit
|
explicit
|
||||||
operator string() const;
|
operator string() const;
|
||||||
|
|
||||||
friend bool operator< (EntryID const& i1, EntryID const& i2) { return i1.getSym() < i2.getSym(); }
|
friend auto operator<=> (EntryID const& i1, EntryID const& i2) { return i1.getSym() <=> i2.getSym(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
operator== (BareEntryID const& i1, BareEntryID const& i2)
|
operator== (BareEntryID const& i1, BareEntryID const& i2)
|
||||||
{
|
{
|
||||||
return i1.getHash() == i2.getHash();
|
return i1.getHash() == i2.getHash();
|
||||||
}
|
}
|
||||||
|
// Note: since we allow comparison only between EntryIDs of same type
|
||||||
|
// and also feed-down the symbol into the hash value, both equality
|
||||||
|
// and (total) ordering mesh up perfectly.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,7 @@ namespace lib {
|
||||||
return definition_;
|
return definition_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto operator<=> (QueryText const&) const =default;
|
||||||
|
|
||||||
bool
|
bool
|
||||||
empty() const
|
empty() const
|
||||||
|
|
@ -105,19 +106,6 @@ namespace lib {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
string normalise (string const& rawDefinition);
|
string normalise (string const& rawDefinition);
|
||||||
|
|
||||||
|
|
||||||
friend bool
|
|
||||||
operator== (QueryText const& q1, QueryText const& q2)
|
|
||||||
{
|
|
||||||
return q1.definition_ == q2.definition_;
|
|
||||||
}
|
|
||||||
friend bool
|
|
||||||
operator< (QueryText const& q1, QueryText const& q2)
|
|
||||||
{
|
|
||||||
return q1.definition_ < q2.definition_;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend HashVal hash_value (QueryText const& entry);
|
friend HashVal hash_value (QueryText const& entry);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,6 @@
|
||||||
#include "lib/symbol.hpp"
|
#include "lib/symbol.hpp"
|
||||||
#include "lib/util.hpp"
|
#include "lib/util.hpp"
|
||||||
|
|
||||||
#include <boost/operators.hpp>
|
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
@ -215,7 +214,6 @@ namespace time {
|
||||||
, class FMT = digxel::Formatter<NUM>
|
, class FMT = digxel::Formatter<NUM>
|
||||||
>
|
>
|
||||||
class Digxel
|
class Digxel
|
||||||
: public boost::totally_ordered<Digxel<NUM,FMT>>
|
|
||||||
{
|
{
|
||||||
mutable
|
mutable
|
||||||
FMT buffer_;
|
FMT buffer_;
|
||||||
|
|
@ -297,9 +295,9 @@ namespace time {
|
||||||
NUM operator++ (int) { NUM p(value_); *this =p+1; return p;}
|
NUM operator++ (int) { NUM p(value_); *this =p+1; return p;}
|
||||||
NUM operator-- (int) { NUM p(value_); *this =p-1; return p;}
|
NUM operator-- (int) { NUM p(value_); *this =p-1; return p;}
|
||||||
|
|
||||||
//---Supporting-totally_ordered---------
|
//---Supporting-total-ordering----------
|
||||||
bool operator< (Digxel const& o) const { return value_ < NUM(o); }
|
auto operator<=>(Digxel const& o) const { return value_ <=> NUM(o); }
|
||||||
bool operator== (Digxel const& o) const { return value_ == NUM(o); }
|
bool operator== (Digxel const& o) const { return value_ == NUM(o); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,6 @@
|
||||||
#include "lib/time/timecode.hpp"
|
#include "lib/time/timecode.hpp"
|
||||||
#include "lib/symbol.hpp"
|
#include "lib/symbol.hpp"
|
||||||
|
|
||||||
//#include <boost/operators.hpp>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@
|
||||||
|
|
||||||
#include <boost/operators.hpp>
|
#include <boost/operators.hpp>
|
||||||
#include <boost/rational.hpp>
|
#include <boost/rational.hpp>
|
||||||
|
#include <compare>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
@ -139,8 +140,6 @@ namespace time {
|
||||||
* @see TimeVar when full arithmetics are required
|
* @see TimeVar when full arithmetics are required
|
||||||
*/
|
*/
|
||||||
class TimeValue
|
class TimeValue
|
||||||
: boost::totally_ordered<TimeValue,
|
|
||||||
boost::totally_ordered<TimeValue, raw_time_64>>
|
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/** the raw (internal) time value
|
/** the raw (internal) time value
|
||||||
|
|
@ -196,12 +195,12 @@ namespace time {
|
||||||
/** @return is in-domain, not a boundary value */
|
/** @return is in-domain, not a boundary value */
|
||||||
bool isRegular() const;
|
bool isRegular() const;
|
||||||
|
|
||||||
// Supporting totally_ordered
|
// Supporting strong total ordering
|
||||||
friend bool operator< (TimeValue const& t1, TimeValue const& t2) { return t1.t_ < t2.t_; }
|
std::strong_ordering operator<=> (TimeValue const&) const =default;
|
||||||
friend bool operator< (TimeValue const& t1, raw_time_64 t2) { return t1.t_ < t2 ; }
|
bool operator== (TimeValue const&) const =default;
|
||||||
friend bool operator> (TimeValue const& t1, raw_time_64 t2) { return t1.t_ > t2 ; }
|
|
||||||
friend bool operator== (TimeValue const& t1, TimeValue const& t2) { return t1.t_ == t2.t_; }
|
std::strong_ordering operator<=> (raw_time_64 tt) const { return t_ <=> tt; }
|
||||||
friend bool operator== (TimeValue const& t1, raw_time_64 t2) { return t1.t_ == t2 ; }
|
bool operator== (raw_time_64 tt) const { return t_ == tt; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -582,7 +581,6 @@ namespace time {
|
||||||
*/
|
*/
|
||||||
class TimeSpan
|
class TimeSpan
|
||||||
: public Time
|
: public Time
|
||||||
, boost::totally_ordered<TimeSpan>
|
|
||||||
{
|
{
|
||||||
Duration dur_;
|
Duration dur_;
|
||||||
|
|
||||||
|
|
@ -651,10 +649,15 @@ namespace time {
|
||||||
/** @internal diagnostics */
|
/** @internal diagnostics */
|
||||||
explicit operator std::string() const;
|
explicit operator std::string() const;
|
||||||
|
|
||||||
/// Supporting extended total order, based on start and interval length
|
/// Supporting extended strong total ordering, based on start and interval length
|
||||||
friend bool operator== (TimeSpan const& t1, TimeSpan const& t2) { return t1.t_==t2.t_ && t1.dur_==t2.dur_; }
|
std::strong_ordering
|
||||||
friend bool operator< (TimeSpan const& t1, TimeSpan const& t2) { return t1.t_< t2.t_ ||
|
operator<=> (TimeSpan const& ts) const
|
||||||
(t1.t_==t2.t_ && t1.dur_< t2.dur_);}
|
{
|
||||||
|
auto ord{ t_ <=> ts.t_ };
|
||||||
|
return ord != 0? ord
|
||||||
|
: dur_ <=> ts.dur_;
|
||||||
|
}
|
||||||
|
bool operator== (TimeSpan const& ts) const =default;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,10 +54,8 @@
|
||||||
#include "lib/hash-value.h"
|
#include "lib/hash-value.h"
|
||||||
#include "lib/p.hpp"
|
#include "lib/p.hpp"
|
||||||
|
|
||||||
#include <boost/type_traits/is_base_of.hpp>
|
#include <type_traits>
|
||||||
#include <boost/operators.hpp>
|
#include <compare>
|
||||||
|
|
||||||
#include <cstddef>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
@ -137,8 +135,7 @@ namespace asset {
|
||||||
* @author Ichthyo
|
* @author Ichthyo
|
||||||
*/
|
*/
|
||||||
class Asset
|
class Asset
|
||||||
: public boost::totally_ordered1< Asset
|
: util::NonCopyable
|
||||||
, util::NonCopyable >
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
@ -147,7 +144,6 @@ namespace asset {
|
||||||
* sufficiently identifying any given Asset.
|
* sufficiently identifying any given Asset.
|
||||||
*/
|
*/
|
||||||
struct Ident
|
struct Ident
|
||||||
: boost::totally_ordered<Ident>
|
|
||||||
{
|
{
|
||||||
/** element ID, comprehensible but sanitised.
|
/** element ID, comprehensible but sanitised.
|
||||||
* The tuple (category, name, org) is unique.
|
* The tuple (category, name, org) is unique.
|
||||||
|
|
@ -181,11 +177,13 @@ namespace asset {
|
||||||
,const uint ver=1);
|
,const uint ver=1);
|
||||||
|
|
||||||
|
|
||||||
int compare (Ident const& other) const;
|
/** ordering of Assets is based on the ordering of Ident tuples,
|
||||||
|
* descending from Category to origin and finally to the asset element ID.
|
||||||
|
* @note version info is ignored for this comparison */
|
||||||
|
auto operator<=>(Ident const& oi) const { return std::tie ( category, org, name)
|
||||||
|
<=> std::tie (oi.category,oi.org,oi.name); }
|
||||||
|
bool operator== (Ident const& oi) const { return 0 == *this <=> oi; }
|
||||||
|
|
||||||
/** @note equality ignores version differences */
|
|
||||||
bool operator== (Ident const& oi) const { return compare (oi) ==0; }
|
|
||||||
bool operator< (Ident const& oi) const { return compare (oi) < 0; }
|
|
||||||
|
|
||||||
operator string () const;
|
operator string () const;
|
||||||
|
|
||||||
|
|
@ -201,8 +199,8 @@ namespace asset {
|
||||||
virtual const ID<Asset>& getID() const { return id; }
|
virtual const ID<Asset>& getID() const { return id; }
|
||||||
|
|
||||||
|
|
||||||
bool operator== (Asset const& oa) const { return ident == oa.ident; }
|
bool operator== (Asset const& oa) const { return ident == oa.ident; }
|
||||||
bool operator< (Asset const& oa) const { return ident < oa.ident; }
|
auto operator<=>(Asset const& oa) const { return ident <=> oa.ident; }
|
||||||
|
|
||||||
virtual operator string () const;
|
virtual operator string () const;
|
||||||
|
|
||||||
|
|
@ -300,24 +298,6 @@ namespace asset {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ====== ordering of Assets and Asset-Pointers ====== */
|
|
||||||
|
|
||||||
/** ordering of Assets is based on the ordering
|
|
||||||
* of Ident tuples, which are supposed to be unique.
|
|
||||||
* By using our customised lumiera::P as smart ptr,
|
|
||||||
* comparison on P<Asset> ptrs will be automatically
|
|
||||||
* forwarded to the Asset comparison operators.
|
|
||||||
* @note version info is irrelevant */
|
|
||||||
inline int
|
|
||||||
Asset::Ident::compare (Asset::Ident const& oi) const
|
|
||||||
{
|
|
||||||
int res;
|
|
||||||
if (0 != (res=category.compare (oi.category))) return res;
|
|
||||||
if (0 != (res=org.compare (oi.org))) return res;
|
|
||||||
return name.compare (oi.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** promote subtype-ptr to PAsset, e.g. for comparing */
|
/** promote subtype-ptr to PAsset, e.g. for comparing */
|
||||||
template<class A>
|
template<class A>
|
||||||
inline const PcAsset
|
inline const PcAsset
|
||||||
|
|
@ -329,11 +309,11 @@ namespace asset {
|
||||||
|
|
||||||
/** type trait for detecting a shared-ptr-to-asset */
|
/** type trait for detecting a shared-ptr-to-asset */
|
||||||
template <class X>
|
template <class X>
|
||||||
struct is_pAsset : boost::false_type {};
|
struct is_pAsset : std::false_type { };
|
||||||
|
|
||||||
template <class A>
|
template <class A>
|
||||||
struct is_pAsset<shared_ptr<A>>
|
struct is_pAsset<shared_ptr<A>>
|
||||||
: boost::is_base_of<Asset, A> {};
|
: std::is_base_of<Asset, A> { };
|
||||||
|
|
||||||
|
|
||||||
/** marker constant denoting a NIL asset */
|
/** marker constant denoting a NIL asset */
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
#include "lib/hash-standard.hpp"
|
#include "lib/hash-standard.hpp"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <compare>
|
||||||
#include <boost/functional/hash.hpp>
|
#include <boost/functional/hash.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -73,29 +74,15 @@ namespace asset {
|
||||||
Category (const Kind root, Literal subfolder ="")
|
Category (const Kind root, Literal subfolder ="")
|
||||||
: kind_(root), path_(subfolder) {};
|
: kind_(root), path_(subfolder) {};
|
||||||
|
|
||||||
bool operator== (Category const& other) const { return kind_== other.kind_ and path_== other.path_; }
|
auto operator<=> (Category const&) const =default;
|
||||||
bool operator!= (Category const& other) const { return kind_!= other.kind_ or path_!= other.path_; }
|
|
||||||
|
|
||||||
bool hasKind (Kind refKind) const { return kind_ == refKind; }
|
bool hasKind (Kind refKind) const { return kind_ == refKind; }
|
||||||
bool isWithin (Category const&) const;
|
bool isWithin (Category const&) const;
|
||||||
void setPath (string const& newpath) { this->path_ = newpath; }
|
void setPath (string const& newpath) { this->path_ = newpath; }
|
||||||
|
|
||||||
|
|
||||||
operator string () const;
|
operator string () const;
|
||||||
|
|
||||||
friend size_t hash_value (Category const&);
|
friend size_t hash_value (Category const&);
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
compare (Category const& co) const
|
|
||||||
{
|
|
||||||
int res = int(kind_) - int(co.kind_);
|
|
||||||
if (0 != res)
|
|
||||||
return res;
|
|
||||||
else
|
|
||||||
return path_.compare (co.path_);
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,6 @@
|
||||||
//#include "lib/util.hpp"
|
//#include "lib/util.hpp"
|
||||||
#include "lib/symbol.hpp"
|
#include "lib/symbol.hpp"
|
||||||
|
|
||||||
//#include <boost/operators.hpp>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace lumiera{ ///////TODO: shouldn't that be namespace lib? or steam?
|
namespace lumiera{ ///////TODO: shouldn't that be namespace lib? or steam?
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@
|
||||||
#include "lib/format-obj.hpp"
|
#include "lib/format-obj.hpp"
|
||||||
#include "lib/util.hpp"
|
#include "lib/util.hpp"
|
||||||
|
|
||||||
#include <boost/operators.hpp>
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
@ -47,7 +46,6 @@ namespace steam {
|
||||||
namespace control {
|
namespace control {
|
||||||
namespace err = lumiera::error;
|
namespace err = lumiera::error;
|
||||||
|
|
||||||
using boost::equality_comparable;
|
|
||||||
using lib::meta::func::bindLast;
|
using lib::meta::func::bindLast;
|
||||||
using lib::meta::func::chained;
|
using lib::meta::func::chained;
|
||||||
using lib::meta::equals_safeInvoke;
|
using lib::meta::equals_safeInvoke;
|
||||||
|
|
@ -77,7 +75,6 @@ namespace control {
|
||||||
*/
|
*/
|
||||||
template<typename SIG, typename MEM>
|
template<typename SIG, typename MEM>
|
||||||
class MementoTie
|
class MementoTie
|
||||||
: public equality_comparable<MementoTie<SIG,MEM>>
|
|
||||||
{
|
{
|
||||||
typedef typename CommandSignature<SIG,MEM>::CaptureSig SIG_cap;
|
typedef typename CommandSignature<SIG,MEM>::CaptureSig SIG_cap;
|
||||||
typedef typename CommandSignature<SIG,MEM>::UndoOp_Sig SIG_undo;
|
typedef typename CommandSignature<SIG,MEM>::UndoOp_Sig SIG_undo;
|
||||||
|
|
@ -195,7 +192,7 @@ namespace control {
|
||||||
template<typename SIG, typename MEM>
|
template<typename SIG, typename MEM>
|
||||||
MementoTie<SIG,MEM>::operator std::string() const
|
MementoTie<SIG,MEM>::operator std::string() const
|
||||||
{
|
{
|
||||||
if (!undo_ or !capture_)
|
if (not undo_ or not capture_)
|
||||||
return "·noUNDO·";
|
return "·noUNDO·";
|
||||||
|
|
||||||
if (not isCaptured_)
|
if (not isCaptured_)
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
#include "steam/asset/pipe.hpp"
|
#include "steam/asset/pipe.hpp"
|
||||||
#include "common/query.hpp"
|
#include "common/query.hpp"
|
||||||
|
|
||||||
#include <boost/operators.hpp>
|
#include <compare>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -121,7 +121,7 @@ namespace mobject {
|
||||||
class OutputMapping
|
class OutputMapping
|
||||||
: public DEF
|
: public DEF
|
||||||
{
|
{
|
||||||
typedef _def<DEF> Setup;
|
using Setup = _def<DEF>;
|
||||||
|
|
||||||
using PId = asset::ID<asset::Pipe>;
|
using PId = asset::ID<asset::Pipe>;
|
||||||
using PPipe = asset::PPipe;
|
using PPipe = asset::PPipe;
|
||||||
|
|
@ -148,10 +148,11 @@ namespace mobject {
|
||||||
* of the specific resolution functor, embedded in the definition context `DEF`,
|
* of the specific resolution functor, embedded in the definition context `DEF`,
|
||||||
* which was given when instantiating the OutputMapping template.
|
* which was given when instantiating the OutputMapping template.
|
||||||
* @note depends on the template parameter of the enclosing OutputMapping type!
|
* @note depends on the template parameter of the enclosing OutputMapping type!
|
||||||
|
* @remarks
|
||||||
|
* - final mapping result can be compared to Target
|
||||||
|
* - Resolvers (mapping values) can be compared based on the Pipe-hash
|
||||||
*/
|
*/
|
||||||
class Resolver
|
class Resolver
|
||||||
: public boost::equality_comparable<Resolver, Target // final mapping result can be compared to Target...
|
|
||||||
, boost::equality_comparable<Resolver>> // mapping values can be compared.
|
|
||||||
{
|
{
|
||||||
OutputMapping& thisMapping_;
|
OutputMapping& thisMapping_;
|
||||||
HashVal& pID_;
|
HashVal& pID_;
|
||||||
|
|
|
||||||
|
|
@ -100,25 +100,25 @@ namespace test {
|
||||||
Category c5 (STRUCT);
|
Category c5 (STRUCT);
|
||||||
Category c6 (META);
|
Category c6 (META);
|
||||||
|
|
||||||
CHECK (0 > c1.compare(c2));
|
CHECK (0 > c1 <=> c2 );
|
||||||
CHECK (0 > c2.compare(c3));
|
CHECK (0 > c2 <=> c3 );
|
||||||
CHECK (0 > c3.compare(c4));
|
CHECK (0 > c3 <=> c4 );
|
||||||
CHECK (0 > c4.compare(c5));
|
CHECK (0 > c4 <=> c5 );
|
||||||
CHECK (0 > c5.compare(c6));
|
CHECK (0 > c5 <=> c6 );
|
||||||
|
|
||||||
CHECK (0 ==c1.compare(c1));
|
CHECK (0 ==c1 <=> c1 );
|
||||||
CHECK (0 > c1.compare(c6));
|
CHECK (0 > c1 <=> c6 );
|
||||||
|
|
||||||
Category c21 (VIDEO,"bin1");
|
Category c21 (VIDEO,"bin1");
|
||||||
Category c22 (VIDEO,"bin2");
|
Category c22 (VIDEO,"bin2");
|
||||||
Category c23 (VIDEO,"bin2/sub");
|
Category c23 (VIDEO,"bin2/sub");
|
||||||
|
|
||||||
CHECK (0 > c1.compare(c21));
|
CHECK (0 > c1 <=> c21 );
|
||||||
CHECK (0 > c2.compare(c21));
|
CHECK (0 > c2 <=> c21 );
|
||||||
CHECK (0 < c22.compare(c21));
|
CHECK (0 < c22 <=> c21 );
|
||||||
CHECK (0 < c23.compare(c22));
|
CHECK (0 < c23 <=> c22 );
|
||||||
CHECK (0 < c23.compare(c21));
|
CHECK (0 < c23 <=> c21 );
|
||||||
CHECK ( 0==c22.compare(c22));
|
CHECK (0 ==c22 <=> c22 );
|
||||||
|
|
||||||
|
|
||||||
CHECK ( c2 == c2 );
|
CHECK ( c2 == c2 );
|
||||||
|
|
|
||||||
|
|
@ -84,17 +84,17 @@ namespace test {
|
||||||
CHECK (key4 != key5);
|
CHECK (key4 != key5);
|
||||||
CHECK (key1 != key5);
|
CHECK (key1 != key5);
|
||||||
|
|
||||||
CHECK ( 0 > key2.compare(key3));
|
CHECK ( 0 > key2 <=> key3 );
|
||||||
CHECK ( 0 < key3.compare(key2));
|
CHECK ( 0 < key3 <=> key2 );
|
||||||
|
|
||||||
CHECK ( 0 > key3.compare(key4));
|
CHECK ( 0 > key3 <=> key4 );
|
||||||
CHECK ( 0 > key4.compare(key5));
|
CHECK ( 0 > key4 <=> key5 );
|
||||||
CHECK ( 0 > key1.compare(key5));
|
CHECK ( 0 > key1 <=> key5 );
|
||||||
CHECK ( 0 > key2.compare(key5));
|
CHECK ( 0 > key2 <=> key5 );
|
||||||
CHECK ( 0 > key3.compare(key5));
|
CHECK ( 0 > key3 <=> key5 );
|
||||||
CHECK ( 0 > key1.compare(key3));
|
CHECK ( 0 > key1 <=> key3 );
|
||||||
CHECK ( 0 > key1.compare(key4));
|
CHECK ( 0 > key1 <=> key4 );
|
||||||
CHECK ( 0 > key2.compare(key4));
|
CHECK ( 0 > key2 <=> key4 );
|
||||||
|
|
||||||
|
|
||||||
// ordering of Asset smart ptrs
|
// ordering of Asset smart ptrs
|
||||||
|
|
|
||||||
|
|
@ -157128,7 +157128,80 @@ std::cout << tmpl.render({"what", "World"}) << s
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node CREATED="1749432400380" ID="ID_1422603149" MODIFIED="1749432404143" TEXT="Neuerungen">
|
<node CREATED="1749432400380" ID="ID_1422603149" MODIFIED="1749432404143" TEXT="Neuerungen">
|
||||||
<node CREATED="1749432405584" ID="ID_1749311235" MODIFIED="1749432412017" TEXT="Spaceship und comparisons">
|
<node CREATED="1749432405584" ID="ID_1749311235" MODIFIED="1751556699132" TEXT="Spaceship und comparisons">
|
||||||
|
<node CREATED="1751553920416" ID="ID_1478329508" MODIFIED="1751553933142" TEXT="zwei Basis-Operatoren">
|
||||||
|
<node CREATED="1751553934321" ID="ID_1726777708" MODIFIED="1751553952618" TEXT="== : equality"/>
|
||||||
|
<node CREATED="1751553936994" ID="ID_1994276563" MODIFIED="1751553948379" TEXT="<=> : three-way-comparison">
|
||||||
|
<node CREATED="1751553984307" ID="ID_1643176892" MODIFIED="1751554000442" TEXT="Ergebnis muß eine Enum-Konstante der richtigen Ordnungs-Art sein"/>
|
||||||
|
<node CREATED="1751553955550" ID="ID_1484075829" MODIFIED="1751554006373" TEXT="drei Arten der Ordnung">
|
||||||
|
<node CREATED="1751554010040" ID="ID_1842008800" MODIFIED="1751554068180" TEXT="strong_ordering">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
strong_ordering::greater
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
strong_ordering::equal
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
strong_ordering::less
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<node CREATED="1751554096475" ID="ID_1089124286" MODIFIED="1751554101370" TEXT="impliziert totale Ordnung"/>
|
||||||
|
<node CREATED="1751554102047" ID="ID_36198234" MODIFIED="1751554190744" TEXT="equal elements können füreinander eintreten und ersetzt werden"/>
|
||||||
|
<node CREATED="1751554145248" ID="ID_97756971" MODIFIED="1751554160948" TEXT="d.h. es gibt keine darüber hinaus gehende Identität oder verdeckte Eigenschaften"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751554194661" ID="ID_1067364226" MODIFIED="1751554229304" TEXT="weak_ordering">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
weak_ordering::greater
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
weak_ordering::equivalent
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
weak_ordering::less
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<node CREATED="1751554230529" ID="ID_448000781" MODIFIED="1751554235908" TEXT="ebenfalls eine totale Ordnung"/>
|
||||||
|
<node CREATED="1751554237304" ID="ID_1965186589" MODIFIED="1751554252370" TEXT="aber Elemente sind nur äquivalent">
|
||||||
|
<node CREATED="1751554309536" ID="ID_135054244" MODIFIED="1751554316835" TEXT="beachte: deshalb auch der andere Enum-Name"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751554253930" ID="ID_514319325" MODIFIED="1751554268254" TEXT="d.h. sie bleiben darüberhinaus unterscheidbar"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751554322326" ID="ID_1289562331" MODIFIED="1751554365777" TEXT="partial_ordering">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
partial_ordering::greater
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
partial_ordering::equivalent
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
partial_ordering::less
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
partial_ordering::unordered
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<node CREATED="1751554391336" ID="ID_550783219" MODIFIED="1751554414393" TEXT="d.h. es gibt Elemente, zwischen denen die Ordnung nicht feststellbar ist"/>
|
||||||
|
<node CREATED="1751554414933" ID="ID_1463703629" MODIFIED="1751554423224" TEXT="Beispiel NaN für floating-point"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751556597785" ID="ID_983998863" LINK="https://brevzin.github.io/c++/2019/07/28/comparisons-cpp20/#a-new-ordering-primitive-" MODIFIED="1751556696561" TEXT="sehr gute Beschreibung in Barry's Blog"/>
|
||||||
|
</node>
|
||||||
<node CREATED="1749432593306" ID="ID_786839752" MODIFIED="1749432670131" TEXT="C++20 leitet alle weiteren Vergleichsoperatoren ab">
|
<node CREATED="1749432593306" ID="ID_786839752" MODIFIED="1749432670131" TEXT="C++20 leitet alle weiteren Vergleichsoperatoren ab">
|
||||||
<richcontent TYPE="NOTE"><html>
|
<richcontent TYPE="NOTE"><html>
|
||||||
<head/>
|
<head/>
|
||||||
|
|
@ -157148,7 +157221,12 @@ std::cout << tmpl.render({"what", "World"}) << s
|
||||||
</html></richcontent>
|
</html></richcontent>
|
||||||
<node CREATED="1749434681222" ID="ID_1398333577" LINK="https://en.cppreference.com/w/cpp/language/default_comparisons.html" MODIFIED="1749436254291" TEXT="C++20 kann aufgefordert werden, Vergleichsoperatoren zu synthetisieren">
|
<node CREATED="1749434681222" ID="ID_1398333577" LINK="https://en.cppreference.com/w/cpp/language/default_comparisons.html" MODIFIED="1749436254291" TEXT="C++20 kann aufgefordert werden, Vergleichsoperatoren zu synthetisieren">
|
||||||
<icon BUILTIN="idea"/>
|
<icon BUILTIN="idea"/>
|
||||||
<node CREATED="1749434705968" ID="ID_1291911297" MODIFIED="1750202013218" TEXT="man deklariert einen der Basis-Operatoren"/>
|
<node CREATED="1749434705968" ID="ID_1291911297" MODIFIED="1750202013218" TEXT="man deklariert einen der Basis-Operatoren">
|
||||||
|
<node CREATED="1751559096839" ID="ID_1404716274" MODIFIED="1751559105257" TEXT="im einfachsten Fall genügt Spaceship"/>
|
||||||
|
<node COLOR="#845646" CREATED="1751559106173" ID="ID_701868379" MODIFIED="1751559126409" TEXT="auto operator<=>(const Person& rhs) const = default;">
|
||||||
|
<font NAME="Monospaced" SIZE="12"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
<node CREATED="1749434720796" ID="ID_872664851" MODIFIED="1749434728166" TEXT="und markiert ihn als =default"/>
|
<node CREATED="1749434720796" ID="ID_872664851" MODIFIED="1749434728166" TEXT="und markiert ihn als =default"/>
|
||||||
<node CREATED="1749436185923" ID="ID_1831503076" MODIFIED="1749436216983" TEXT="Rückgabetyp kann auto sein ⟹ Vergleichskategorie wird erschlossen">
|
<node CREATED="1749436185923" ID="ID_1831503076" MODIFIED="1749436216983" TEXT="Rückgabetyp kann auto sein ⟹ Vergleichskategorie wird erschlossen">
|
||||||
<linktarget COLOR="#7fc6d2" DESTINATION="ID_1831503076" ENDARROW="Default" ENDINCLINATION="89;0;" ID="Arrow_ID_1373101959" SOURCE="ID_1719430366" STARTARROW="None" STARTINCLINATION="89;0;"/>
|
<linktarget COLOR="#7fc6d2" DESTINATION="ID_1831503076" ENDARROW="Default" ENDINCLINATION="89;0;" ID="Arrow_ID_1373101959" SOURCE="ID_1719430366" STARTARROW="None" STARTINCLINATION="89;0;"/>
|
||||||
|
|
@ -167031,9 +167109,7 @@ Since then others have made contributions, see the log for the history.</font></
|
||||||
</node>
|
</node>
|
||||||
<node COLOR="#338800" CREATED="1751487056673" ID="ID_1177999705" MODIFIED="1751487077626">
|
<node COLOR="#338800" CREATED="1751487056673" ID="ID_1177999705" MODIFIED="1751487077626">
|
||||||
<richcontent TYPE="NODE"><html>
|
<richcontent TYPE="NODE"><html>
|
||||||
<head>
|
<head/>
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
aber Literal kann komplett <b>constexpr</b> sein
|
aber Literal kann komplett <b>constexpr</b> sein
|
||||||
|
|
@ -167047,10 +167123,343 @@ Since then others have made contributions, see the log for the history.</font></
|
||||||
<icon BUILTIN="button_ok"/>
|
<icon BUILTIN="button_ok"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1749437085707" ID="ID_586550649" MODIFIED="1749437096722" TEXT="Boost-Operators könnte man komplett loswerden">
|
<node COLOR="#5b280f" CREATED="1749437085707" ID="ID_586550649" MODIFIED="1751592221545" TEXT="Boost-Operators könnte man komplett loswerden">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
<i>immerhin</i>: konnte alle komplexen Vergleichsoperatoren viel einfacher per Spaceship darstellen...
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Trotzdem verwenden wir weiterhin boost::operators (und das ist nicht wirklich problematisch, da header-only)
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<arrowlink COLOR="#6f304d" DESTINATION="ID_276624692" ENDARROW="Default" ENDINCLINATION="-158;11;" ID="Arrow_ID_620986048" STARTARROW="None" STARTINCLINATION="18;97;"/>
|
||||||
|
<icon BUILTIN="button_cancel"/>
|
||||||
<node CREATED="1749437103284" ID="ID_1755401449" MODIFIED="1749437118098" TEXT="da nun C++20 die selber Aufgabe automatisch erledigt"/>
|
<node CREATED="1749437103284" ID="ID_1755401449" MODIFIED="1749437118098" TEXT="da nun C++20 die selber Aufgabe automatisch erledigt"/>
|
||||||
<node CREATED="1749437120518" ID="ID_19153367" LINK="#ID_1398333577" MODIFIED="1749437148111" TEXT="ggfs kann es die Lösung sogar synthetisieren"/>
|
<node CREATED="1749437120518" ID="ID_19153367" LINK="#ID_1398333577" MODIFIED="1749437148111" TEXT="ggfs kann es die Lösung sogar synthetisieren"/>
|
||||||
|
<node CREATED="1751552247615" ID="ID_338103952" MODIFIED="1751552276601" TEXT="Umstellung meist einfach">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
<node CREATED="1751552253435" ID="ID_1008670578" MODIFIED="1751552259503" TEXT="Boost-Include entfernen"/>
|
||||||
|
<node CREATED="1751552260280" ID="ID_372321151" LINK="#ID_1749311235" MODIFIED="1751556701625" TEXT="ggfs Spaceship einführen"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1751552283384" ID="ID_1633449896" MODIFIED="1751591964107" TEXT="umgestellt">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1751552290375" FOLDED="true" ID="ID_1407680365" MODIFIED="1751591966896" TEXT="advice/index.hpp">
|
||||||
|
<node COLOR="#338800" CREATED="1751552361016" ID="ID_1667765810" MODIFIED="1751563032026" TEXT="equality">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1751560642996" ID="ID_1715268793" MODIFIED="1751563032027" TEXT="aber auch mixed equality mit Point-of-Advice">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
Template-Parameter POA
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1751552310106" FOLDED="true" ID="ID_1129876969" MODIFIED="1751591968416" TEXT="common/query.hpp">
|
||||||
|
<node CREATED="1751552369239" ID="ID_152823874" MODIFIED="1751552372766" TEXT="totally-ordered"/>
|
||||||
|
<node CREATED="1751556782618" ID="ID_1988422773" MODIFIED="1751556815960" TEXT="das ist Platzhalter-Code — die Ordnung ist „halbseiden“"/>
|
||||||
|
<node CREATED="1751556770160" ID="ID_1827164681" MODIFIED="1751557044345" TEXT="inhaltlich kann das eigentlich nur eine weak-order sein">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
denn was bedeutet es schon, wenn eine Query »kleiner« ist als eine andere — und dann im Bezug dazu, wenn zwei Queries »gleich« sind?
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751557045180" ID="ID_1205416278" MODIFIED="1751557100864" TEXT="allerdings ist es als totale und starke Ordnung definiert">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
und zwar weil letztlich das Prädikaten-Symbol und dann noch zusätzlich die Typ-ID die Entscheidung fällt
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</richcontent>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1751557449797" ID="ID_933075599" MODIFIED="1751563026280" TEXT="Umbau">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
<node CREATED="1751557454296" ID="ID_1552704056" LINK="#ID_1398333577" MODIFIED="1751557550130" TEXT="zunächst QueryID mit einer synthetisierten Ordnung versehen">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
d.h. die drei explizit definieren Operatoren können weg, und dafür wird ein defaulted Spaceship eingeführt
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751560176892" ID="ID_369759026" MODIFIED="1751560190590" TEXT="ebenso auch für QueryText notwendig"/>
|
||||||
|
<node CREATED="1751560191651" ID="ID_1596139878" MODIFIED="1751560210324" TEXT="dann sinngemäß ein Spaceship für den QueryKey"/>
|
||||||
|
<node CREATED="1751560460438" ID="ID_1488282756" MODIFIED="1751560467360" TEXT="die equality kann man defaulten">
|
||||||
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1751560478393" HGAP="23" ID="ID_76680899" MODIFIED="1751560583423" TEXT="Vorsicht: das ist eine Verschärfung" VSHIFT="5">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
bisher wurde die Kategorie für die Gleichheit ignoriert, d.h. es wurde nur die Prädikation verglichen; das ist inkonsistent mit der Ordnung, welche diesbezüglich noch differenziert (gleiche Prädikation bei verschiedener Kategorie ist nicht äquivalent)
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#5e0f69" CREATED="1751560496449" ID="ID_132413636" MODIFIED="1751560512504" TEXT="Tests laufen aber dennoch....">
|
||||||
|
<font NAME="SansSerif" SIZE="10"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1751560720870" FOLDED="true" ID="ID_1591405502" MODIFIED="1751591971299" TEXT="idi/entry-id.hpp">
|
||||||
|
<node CREATED="1751560734728" ID="ID_1800468880" MODIFIED="1751560742260" TEXT="BareEntryID ist equality-comparable"/>
|
||||||
|
<node CREATED="1751560768722" ID="ID_876884067" MODIFIED="1751560777862" TEXT="EntryID<TY> is toatlly-ordered"/>
|
||||||
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1751560916514" ID="ID_840626307" MODIFIED="1751563019577" TEXT="Vorsicht: trickreich">
|
||||||
|
<icon BUILTIN="messagebox_warning"/>
|
||||||
|
<node CREATED="1751560926198" ID="ID_1166552107" MODIFIED="1751560939704" TEXT="die Ordnung nutzt geschickt die Hash-Konstruktion aus">
|
||||||
|
<node CREATED="1751560973552" ID="ID_223440522" MODIFIED="1751560983578" TEXT="Gleichheit auf BareEntryID vergleicht nur den Hash"/>
|
||||||
|
<node CREATED="1751560984118" ID="ID_824628881" MODIFIED="1751560999404" TEXT="in diesen aber fließt der Typ-Parameter von EntryID als seed ein"/>
|
||||||
|
<node CREATED="1751561129233" ID="ID_554871288" MODIFIED="1751561140188" TEXT="wir erlauben keine gemischten Vergleiche für verschiedene Typen"/>
|
||||||
|
<node CREATED="1751561484193" ID="ID_168639766" MODIFIED="1751561543072" TEXT="⟹ wenn das Symbol gleich ist, muß auch der Hash gleich sein">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...weil wir stets die 2-Argument-Konstruktoren von BareEntryID aufrufen, und getTypeHash<TY>() dabei als Seed injizieren
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1751561558207" ID="ID_1882142011" MODIFIED="1751563022873" TEXT="Umbau">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
<node CREATED="1751561569765" ID="ID_1905437203" MODIFIED="1751561584927" TEXT="Equality bleibt wie sie ist"/>
|
||||||
|
<node CREATED="1751561615159" ID="ID_221059577" MODIFIED="1751561634944" TEXT="Spaceship für EntryID<TY> auf den Symbol-String delegieren"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1751582919770" FOLDED="true" ID="ID_757343510" MODIFIED="1751591973655" TEXT="frameid.hpp">
|
||||||
|
<node CREATED="1751582926400" ID="ID_181720145" MODIFIED="1751582997628" TEXT="ist eine Platzhalter-Impl">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<div style="background-color: #eee0b5; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 2px">
|
||||||
|
<div style="color: #202020; background-color: #eee0b5; font-family: Bitstream Vera Sans Mono; font-size: 9pt; white-space: pre">
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#b88b63">/**</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#b88b63">* Identification tuple for addressing frames unambiguously.</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#b88b63">* </font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#b88b63">* </font><font color="#b76746">@todo</font><font color="#b88b63"> currently (7/08) this is a dummy implementation to find out</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#b88b63">* what interface the Steam layer needs. Probably the vault layer will</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#b88b63">* later on define what is actually needed; this header should then</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#b88b63">* be replaced by a combined C/C++ header</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#b88b63">*/</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#4a1a65"><b>class</b></font><font color="#3a1f18"> </font><font color="#635e96"><b>FrameID</b></font><font color="#3a1f18"> </font><font color="#65533c">:</font><font color="#3a1f18"> </font><font color="#535773">boost</font><font color="#65533c">::</font><font color="#635e96"><b>totally_ordered</b></font><font color="#65533c"><</font><font color="#635e96"><b>FrameID</b></font><font color="#65533c">></font><font color="#3a1f18">  </font><font color="#ab815c">////////////</font><font color="#7f9fbf"><b>TODO</b></font><font color="#ab815c"> it seems we don't need total ordering, only comparison. Clarify this!</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#11123a">{</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#7f004c"><b>long</b></font><font color="#3a1f18"> </font><font color="#1a1ac4">dummy</font><font color="#65533c">;</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#4a1a65"><b>public</b></font><font color="#65533c">:</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#632d2d"><b>FrameID</b></font><font color="#11123a">(</font><font color="#7f004c"><b>long</b></font><font color="#3a1f18"> dum</font><font color="#65533c">=</font><font color="#29466b">0</font><font color="#11123a">)</font><font color="#3a1f18">  </font><font color="#65533c">:</font><font color="#3a1f18"> </font><font color="#1a1ac4">dummy</font><font color="#11123a">(</font><font color="#3a1f18">dum</font><font color="#11123a">)</font><font color="#3a1f18"> </font><font color="#11123a">{}</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#632d2d"><b>operator long</b></font><font color="#3a1f18"> </font><font color="#11123a">()</font><font color="#3a1f18"> </font><font color="#11123a">{</font><font color="#3a1f18"> </font><font color="#4a1a65"><b>return</b></font><font color="#3a1f18">  </font><font color="#1a1ac4">dummy</font><font color="#65533c">;</font><font color="#3a1f18"> </font><font color="#11123a">}</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#7f004c"><b>bool</b></font><font color="#3a1f18"> </font><font color="#632d2d"><b>operator<</b></font><font color="#3a1f18"> </font><font color="#11123a">(</font><font color="#4a1a65"><b>const</b></font><font color="#3a1f18">  </font><font color="#635e96"><b>FrameID</b></font><font color="#65533c">&</font><font color="#3a1f18"> other</font><font color="#11123a">)</font><font color="#3a1f18"> </font><font color="#4a1a65"><b>const</b></font><font color="#3a1f18">  </font><font color="#11123a">{</font><font color="#3a1f18"> </font><font color="#4a1a65"><b>return</b></font><font color="#3a1f18"> </font><font color="#1a1ac4">dummy</font><font color="#3a1f18"> </font><font color="#65533c"><</font><font color="#3a1f18">  other</font><font color="#65533c">.</font><font color="#1a1ac4">dummy</font><font color="#65533c">;</font><font color="#3a1f18"> </font><font color="#11123a">}</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#7f004c"><b>bool</b></font><font color="#3a1f18"> </font><font color="#632d2d"><b>operator==</b></font><font color="#3a1f18"> </font><font color="#11123a">(</font><font color="#4a1a65"><b>const</b></font><font color="#3a1f18">  </font><font color="#635e96"><b>FrameID</b></font><font color="#65533c">&</font><font color="#3a1f18"> other</font><font color="#11123a">)</font><font color="#3a1f18"> </font><font color="#4a1a65"><b>const</b></font><font color="#3a1f18">  </font><font color="#11123a">{</font><font color="#3a1f18"> </font><font color="#4a1a65"><b>return</b></font><font color="#3a1f18"> </font><font color="#1a1ac4">dummy</font><font color="#3a1f18"> </font><font color="#65533c">==</font><font color="#3a1f18">  other</font><font color="#65533c">.</font><font color="#1a1ac4">dummy</font><font color="#65533c">;</font><font color="#3a1f18"> </font><font color="#11123a">}</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
<font color="#11123a">}</font><font color="#65533c">;</font>
|
||||||
|
</p>
|
||||||
|
<p style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<node CREATED="1751582935753" ID="ID_500316306" MODIFIED="1751582943794" TEXT="war als totally-ordered markiert"/>
|
||||||
|
<node CREATED="1751582946446" ID="ID_1086354182" MODIFIED="1751582953273" TEXT="aber mit TODO">
|
||||||
|
<node CREATED="1751583101682" ID="ID_943889944" MODIFIED="1751583123466" TEXT="und wird nur noch in rendergraph.cpp includiert"/>
|
||||||
|
<node CREATED="1751583124158" ID="ID_684265294" MODIFIED="1751583138456" TEXT="welches ebenfalls ein (mutmaßlich) obsoleter Platzhalter ist"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1751583003422" ID="ID_5954555" MODIFIED="1751583423285" TEXT="kann strong-ordering einfach synthetisieren">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#5b280f" CREATED="1751583488788" FOLDED="true" ID="ID_594929411" MODIFIED="1751591975999" TEXT="time/timequant.hpp">
|
||||||
|
<icon BUILTIN="button_cancel"/>
|
||||||
|
<node CREATED="1751583495715" ID="ID_1101814606" MODIFIED="1751583503388" TEXT="war bereits auskommentiert"/>
|
||||||
|
<node CREATED="1751583503978" ID="ID_1031816074" MODIFIED="1751583509621" TEXT="verwendet keine Ordnung mehr"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1751583525775" FOLDED="true" ID="ID_1170129897" MODIFIED="1751591978410" TEXT="time/timevalue.hpp">
|
||||||
|
<node CREATED="1751583598799" ID="ID_1671566697" MODIFIED="1751584040879">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
<u>STOP</u>: wir verwenden auch <font color="#3b1690" face="Monospaced">boost::additive </font>und<font color="#3b1690" face="Monospaced"> boost::multipliable</font>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<linktarget COLOR="#db0328" DESTINATION="ID_1671566697" ENDARROW="Default" ENDINCLINATION="122;5;" ID="Arrow_ID_157787687" SOURCE="ID_570890729" STARTARROW="None" STARTINCLINATION="288;16;"/>
|
||||||
|
<icon BUILTIN="stop-sign"/>
|
||||||
|
</node>
|
||||||
|
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#4424a4" CREATED="1751584069704" ID="ID_248891493" MODIFIED="1751585722934" TEXT="also �� nur partiell ablösen">
|
||||||
|
<node COLOR="#338800" CREATED="1751584101169" ID="ID_1534501862" MODIFIED="1751585737091" TEXT="TimeValue ist totally-ordered">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1751584111711" ID="ID_1474501470" MODIFIED="1751585737092" TEXT="und das auch gemischt mit raw_time_64">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#338800" CREATED="1751584614198" ID="ID_1249598763" MODIFIED="1751585737092" TEXT="TimeSpan ist ebenfalls totally-ordered">
|
||||||
|
<icon BUILTIN="button_ok"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#437c98" CREATED="1751585743190" ID="ID_1041121656" MODIFIED="1751585769596" TEXT="(das meiste davon geht per default)">
|
||||||
|
<font NAME="SansSerif" SIZE="10"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#5b280f" CREATED="1751585846306" FOLDED="true" ID="ID_125859069" MODIFIED="1751591980806" TEXT="time/timecode.hpp">
|
||||||
|
<icon BUILTIN="button_cancel"/>
|
||||||
|
<node CREATED="1751585861903" ID="ID_1407795930" MODIFIED="1751585969624">
|
||||||
|
<richcontent TYPE="NODE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
verwendet <font face="Monospaced" color="#7d3838">boost::unit_steppable<SmpteTC></font>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<linktarget COLOR="#7f304d" DESTINATION="ID_1407795930" ENDARROW="Default" ENDINCLINATION="94;6;" ID="Arrow_ID_313835238" SOURCE="ID_1554403748" STARTARROW="None" STARTINCLINATION="252;22;"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1751585888342" ID="ID_1623985034" MODIFIED="1751585908975" TEXT="ebenfalls ein anderer boost-Operator">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1751586111847" FOLDED="true" ID="ID_721791278" MODIFIED="1751591982070" TEXT="time/digxel.hpp">
|
||||||
|
<node CREATED="1751586119734" ID="ID_1155522883" MODIFIED="1751586130545" TEXT="Digxel<NUM> ist totally-ordered"/>
|
||||||
|
<node CREATED="1751586131253" ID="ID_133554672" MODIFIED="1751586152980" TEXT="zurückgeführt auf den numerischen Vergleich auf NUM"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#5b280f" CREATED="1751586625236" FOLDED="true" ID="ID_361355610" MODIFIED="1751591985389" TEXT="control/memento-tie.hpp">
|
||||||
|
<icon BUILTIN="button_cancel"/>
|
||||||
|
<node CREATED="1751586632520" ID="ID_1896663401" MODIFIED="1751586808364" TEXT="markiert als equality-comparable"/>
|
||||||
|
<node CREATED="1751586647964" ID="ID_641737739" MODIFIED="1751586816572" TEXT="aber kein Vergleichsoperator definiert"/>
|
||||||
|
<node CREATED="1751586849934" ID="ID_367037572" MODIFIED="1751586935182" TEXT="macht auch inhaltlich nicht viel Sinn">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
was ist ein »äquivalentes« Memento?
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
wozu würde man das brauchen?
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
normalerweise interessiert nur der Zustand, <i>ob überhaupt</i> ein Memento gespeichert wurde
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751586819278" ID="ID_285242922" MODIFIED="1751586833808" TEXT="insofern kann das wegfallen"/>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1751587097560" FOLDED="true" ID="ID_853815003" MODIFIED="1751591988757" TEXT="mobject/output-mapping.hpp">
|
||||||
|
<node CREATED="1751587156625" ID="ID_518165993" MODIFIED="1751587435902" TEXT="der Resolver ist equality-comparable"/>
|
||||||
|
<node CREATED="1751587412042" ID="ID_4756012" MODIFIED="1751587445118" TEXT="das ist ein lazy-evaluation-Context"/>
|
||||||
|
<node CREATED="1751587478525" ID="ID_1812032958" MODIFIED="1751587490790" TEXT="insofern gibt es zwei Stufen">
|
||||||
|
<node CREATED="1751587491723" ID="ID_948473991" MODIFIED="1751587523490" TEXT="Resolver sind durch einen Pipe-Hash markiert (und damit vergleichbar)"/>
|
||||||
|
<node CREATED="1751587524761" ID="ID_1411774757" MODIFIED="1751587568676" TEXT="mit einem Target-Value kann verglichen werden, indem die Resolution ausgelöst wird"/>
|
||||||
|
<node COLOR="#435e98" CREATED="1751587575905" ID="ID_1052214780" MODIFIED="1751587606598" TEXT="das Schema kann ohne Anpassungen auf C++20 umgestellt werden">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#435e98" CREATED="1751587868631" FOLDED="true" ID="ID_1054681292" MODIFIED="1751591990893" TEXT="steam/asset.hpp">
|
||||||
|
<node CREATED="1751587879112" ID="ID_527791853" MODIFIED="1751587908799" TEXT="Assets und Asset::Ident sind totally-ordered"/>
|
||||||
|
<node CREATED="1751587962923" ID="ID_1933474838" MODIFIED="1751587989795" TEXT="basierend auf (name, category, org)"/>
|
||||||
|
<node CREATED="1751587990623" ID="ID_1118152386" MODIFIED="1751588003490" TEXT="spezieller Twist: Versions-Info wird ignoriert"/>
|
||||||
|
<node CREATED="1751588094889" ID="ID_509211341" MODIFIED="1751588123159" TEXT="bestehende Implementierung baut auf einer compare()-Funktion auf">
|
||||||
|
<icon BUILTIN="idea"/>
|
||||||
|
<node CREATED="1751588124781" ID="ID_1226225987" MODIFIED="1751589241202" TEXT="das ist bereits ein 3-Wege-Vergleich">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
...und er verhält sich wie typischweise in den funktionalen Sprachen; daher ist der Spaceship-Operator ein drop-in replacement, da dessen Ergebnis ja auch mit dem Literal <font face="Monospaced" color="#4133c7">0</font> verglichen werden kann
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751588139307" ID="ID_1212669809" MODIFIED="1751588149197" TEXT="schließt auch asset::Category mit ein"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751588387105" ID="ID_360869172" MODIFIED="1751588411860" TEXT="bei der Gelegenheit: auch boost::type_traits ablösen">
|
||||||
|
<icon BUILTIN="yes"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node COLOR="#5b280f" CREATED="1751583739027" ID="ID_276624692" MODIFIED="1751592174479" TEXT="brauchen boost::operators weiterhin">
|
||||||
|
<linktarget COLOR="#6f304d" DESTINATION="ID_276624692" ENDARROW="Default" ENDINCLINATION="-158;11;" ID="Arrow_ID_620986048" SOURCE="ID_586550649" STARTARROW="None" STARTINCLINATION="18;97;"/>
|
||||||
|
<icon BUILTIN="stop-sign"/>
|
||||||
|
<node CREATED="1751583748723" ID="ID_939403813" MODIFIED="1751583762907" TEXT="wir können zwar alle Vergleiche durch C++20 ersetzen"/>
|
||||||
|
<node CREATED="1751583763495" ID="ID_892134310" MODIFIED="1751584033572" TEXT="aber boost::operators bietet auch lineare Verknüpfung">
|
||||||
|
<richcontent TYPE="NOTE"><html>
|
||||||
|
<head/>
|
||||||
|
<body>
|
||||||
|
<p>
|
||||||
|
additive und multipliable
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Und diese sind mit die massivsten Definition in boost::operators — also sicherlich nichts, was man von Hand nachimplementieren möchte
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html></richcontent>
|
||||||
|
<icon BUILTIN="info"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751583822863" ID="ID_570890729" MODIFIED="1751584040879" TEXT="und wir verwenden dies explizit für die Time-Entitäten">
|
||||||
|
<arrowlink COLOR="#db0328" DESTINATION="ID_1671566697" ENDARROW="Default" ENDINCLINATION="122;5;" ID="Arrow_ID_157787687" STARTARROW="None" STARTINCLINATION="288;16;"/>
|
||||||
|
</node>
|
||||||
|
<node CREATED="1751585934583" ID="ID_1554403748" MODIFIED="1751585976234" TEXT="und unit-steppable für SmpteTC">
|
||||||
|
<arrowlink COLOR="#7f304d" DESTINATION="ID_1407795930" ENDARROW="Default" ENDINCLINATION="94;6;" ID="Arrow_ID_313835238" STARTARROW="None" STARTINCLINATION="252;22;"/>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1750205495310" ID="ID_1294224400" MODIFIED="1750205508850" TEXT="result.hpp : failsafeInvoke vereinfachen">
|
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1750205495310" ID="ID_1294224400" MODIFIED="1750205508850" TEXT="result.hpp : failsafeInvoke vereinfachen">
|
||||||
<icon BUILTIN="flag-yellow"/>
|
<icon BUILTIN="flag-yellow"/>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue