GenNode(#956): define the ctors
implies decision on the ID representation
This commit is contained in:
parent
1082196906
commit
f15266e435
4 changed files with 99 additions and 14 deletions
|
|
@ -101,6 +101,7 @@
|
|||
#include "lib/variant.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
#include "lib/diff/record.hpp"
|
||||
#include "lib/idi/entry-id.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
//#include "lib/format-string.hpp"
|
||||
|
||||
|
|
@ -148,13 +149,88 @@ namespace diff{
|
|||
DataCap(X&& x)
|
||||
: Variant<DataValues>(std::forward<X>(x))
|
||||
{ }
|
||||
|
||||
DataCap(DataCap const& o) =default;
|
||||
DataCap(DataCap&& o) =default;
|
||||
DataCap(DataCap& o)
|
||||
: DataCap((DataCap const&)o)
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
/** generic data element node within a tree */
|
||||
class GenNode
|
||||
struct GenNode
|
||||
{
|
||||
public:
|
||||
class ID
|
||||
: public idi::BareEntryID
|
||||
{
|
||||
friend class GenNode;
|
||||
|
||||
template<typename X>
|
||||
ID (X*, string const& symbolicID)
|
||||
: idi::BareEntryID (symbolicID,
|
||||
idi::getTypeHash<X>())
|
||||
{ }
|
||||
|
||||
public:
|
||||
ID (GenNode const& node)
|
||||
: ID(node.idi)
|
||||
{ }
|
||||
|
||||
// standard copy operations acceptable
|
||||
};
|
||||
|
||||
ID idi;
|
||||
DataCap data;
|
||||
|
||||
template<typename X>
|
||||
GenNode(X&& val)
|
||||
: idi(&val, buildChildID<X>())
|
||||
, data(std::forward<X>(val))
|
||||
{ }
|
||||
|
||||
template<typename X>
|
||||
GenNode(string const& symbolicID, X&& val)
|
||||
: idi(&val, symbolicID)
|
||||
, data(std::forward<X>(val))
|
||||
{ }
|
||||
|
||||
GenNode(string const& symbolicID, const char* text)
|
||||
: GenNode(symbolicID, string(text))
|
||||
{ }
|
||||
|
||||
GenNode(const char* text)
|
||||
: GenNode(string(text))
|
||||
{ }
|
||||
|
||||
GenNode(GenNode const& o) =default;
|
||||
GenNode(GenNode&& o) =default;
|
||||
GenNode(GenNode& o)
|
||||
: GenNode((GenNode const&)o)
|
||||
{ }
|
||||
|
||||
// default copy assignable
|
||||
|
||||
|
||||
bool
|
||||
isNamed() const
|
||||
{
|
||||
return util::startsWith (idi.getSym(), "_CHILD_");
|
||||
}
|
||||
|
||||
friend string
|
||||
name (GenNode const& node)
|
||||
{
|
||||
return node.idi.getSym();
|
||||
}
|
||||
|
||||
private:
|
||||
template<typename X>
|
||||
static string
|
||||
buildChildID()
|
||||
{
|
||||
return "_CHILD_" + idi::generateSymbolicID<X>();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -186,21 +262,21 @@ namespace diff{
|
|||
inline GenNode
|
||||
Rec::buildTypeAttribute (string const& typeID)
|
||||
{
|
||||
return GenNode(); ///TODO
|
||||
return GenNode("type", typeID);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline string
|
||||
Rec::extractKey (GenNode const& v)
|
||||
{
|
||||
return "todo"; ////TODO
|
||||
return v.idi.getSym();
|
||||
}
|
||||
|
||||
template<>
|
||||
inline GenNode
|
||||
Rec::extractVal (GenNode const& v)
|
||||
{
|
||||
return GenNode(); ///TODO
|
||||
return GenNode(v); ///TODO
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -111,6 +111,12 @@ namespace lib {
|
|||
using Type = X;
|
||||
};
|
||||
|
||||
template<typename X, typename TYPES>
|
||||
struct CanBuildFrom<const X, Node<X, TYPES>>
|
||||
{
|
||||
using Type = X;
|
||||
};
|
||||
|
||||
template<typename X, typename T,typename TYPES>
|
||||
struct CanBuildFrom<X, Node<T, TYPES>>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@
|
|||
//#include <vector>
|
||||
#include <cmath>
|
||||
|
||||
using util::isnil;
|
||||
using util::contains;
|
||||
using util::isSameObject;
|
||||
using lib::time::Time;
|
||||
using lib::time::TimeSpan;
|
||||
//using std::string;
|
||||
|
|
@ -93,7 +95,6 @@ namespace test{
|
|||
objectShortcut();
|
||||
symbolReference();
|
||||
sequenceIteration();
|
||||
duplicateDetection();
|
||||
copy_and_move();
|
||||
}
|
||||
|
||||
|
|
@ -110,7 +111,7 @@ namespace test{
|
|||
|
||||
// can optionally be named
|
||||
GenNode n2("π", 3.14159265358979323846264338328);
|
||||
CHECK (fabs (3.14159265 - n2.data.get<double>) < 1e-5 );
|
||||
CHECK (fabs (3.14159265 - n2.data.get<double>()) < 1e-5 );
|
||||
CHECK (n2.isNamed());
|
||||
CHECK ("π" == n2.idi.getSym());
|
||||
CHECK ("π" == name(n2));
|
||||
|
|
@ -255,18 +256,14 @@ namespace test{
|
|||
void
|
||||
sequenceIteration()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
duplicateDetection()
|
||||
{
|
||||
UNIMPLEMENTED ("wtf");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
copy_and_move()
|
||||
{
|
||||
UNIMPLEMENTED ("need to check that?");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,13 @@
|
|||
<node CREATED="1435421670349" ID="ID_1358247529" MODIFIED="1435421676200" TEXT="verwende EntryID">
|
||||
<node CREATED="1435421678004" ID="ID_691179282" MODIFIED="1435421687224" TEXT="Abhängigkeitsprobleme">
|
||||
<node CREATED="1435421693260" ID="ID_1314021887" MODIFIED="1435421708857" TEXT="generische ID-Funktionen"/>
|
||||
<node CREATED="1435421739988" ID="ID_405602814" MODIFIED="1435421749352" TEXT="EntryID gehört in Library"/>
|
||||
<node CREATED="1435421739988" ID="ID_405602814" MODIFIED="1435885199446" TEXT="EntryID gehört in Library">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1435885214592" ID="ID_1198930165" MODIFIED="1435885223858" TEXT="sanitise stört">
|
||||
<node CREATED="1435885226222" ID="ID_776697956" MODIFIED="1435885235138" TEXT="verschiebe in EntryID"/>
|
||||
<node CREATED="1435885235583" ID="ID_444167455" MODIFIED="1435885247194" TEXT="verwende Subklasse"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue