ultimatepp/tutorial/Ntl09/Ntl09.cpp
mdelfede 263ff5f895 changed svn layout
git-svn-id: svn://ultimatepp.org/upp/trunk@281 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2008-06-07 22:31:27 +00:00

69 lines
1.2 KiB
C++

#include <Core/Core.h>
using namespace Upp;
struct Person : Moveable<Person> {
String name;
String surname;
Person(String name, String surname) : name(name), surname(surname) {}
Person() {}
};
unsigned GetHashValue(const Person& p)
{
return CombineHash(p.name, p.surname);
}
bool operator==(const Person& a, const Person& b)
{
return a.name == b.name && a.surname == b.surname;
}
struct Number {
virtual double Get() const = 0;
String ToString() const { return AsString(Get()); }
};
struct Integer : public Number {
int n;
virtual double Get() const { return n; }
Integer(int n) : n(n) {}
};
struct Double : public Number {
double n;
virtual double Get() const { return n; }
Double(double n) : n(n) {}
};
unsigned GetHashValue(const Number& n)
{
return GetHashValue(n.Get());
}
bool operator==(const Number& a, const Number& b)
{
return a.Get() == b.Get();
}
CONSOLE_APP_MAIN
{
Index<Person> p;
p.Add(Person("John", "Smith"));
p.Add(Person("Paul", "Carpenter"));
p.Add(Person("Carl", "Engles"));
DUMP(p.Find(Person("Paul", "Carpenter")));
ArrayIndex<Number> n;
n.Add(new Integer(100));
n.Add(new Double(10.5));
n.Add(new Integer(200));
n.Add(new Double(20.5));
DUMP(n.Find(Double(10.5)));
}