From 3325d89c50330769819788cf5f2aba1b30aa5a9b Mon Sep 17 00:00:00 2001 From: cxl Date: Tue, 17 Mar 2009 13:57:45 +0000 Subject: [PATCH] LazyUpdate reference example git-svn-id: svn://ultimatepp.org/upp/trunk@968 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- reference/LazyUpdate/LazyUpdate.cpp | 35 +++++++++++++++++++++++++++++ reference/LazyUpdate/LazyUpdate.upp | 10 +++++++++ reference/LazyUpdate/init | 4 ++++ 3 files changed, 49 insertions(+) create mode 100644 reference/LazyUpdate/LazyUpdate.cpp create mode 100644 reference/LazyUpdate/LazyUpdate.upp create mode 100644 reference/LazyUpdate/init diff --git a/reference/LazyUpdate/LazyUpdate.cpp b/reference/LazyUpdate/LazyUpdate.cpp new file mode 100644 index 000000000..eaea63572 --- /dev/null +++ b/reference/LazyUpdate/LazyUpdate.cpp @@ -0,0 +1,35 @@ +#include + +using namespace Upp; + +struct DblSum { + Vector d; + mutable double sum; + LazyUpdate dirty; + +public: + void Add(double x) { + d.Add(x); + dirty.Invalidate(); + } + + double Sum() const { + if(dirty.BeginUpdate()) { + Vector o = GetSortOrder(d); + sum = 0; + for(int i = 0; i < o.GetCount(); i++) + sum += d[o[i]]; + dirty.EndUpdate(); + } + return sum; + } +}; + +CONSOLE_APP_MAIN +{ + DblSum x; + x.Add(100); + for(int i = 0; i < 1000*1000; i++) + x.Add(1e-10); + Cout() << x.Sum() << "\n"; +} diff --git a/reference/LazyUpdate/LazyUpdate.upp b/reference/LazyUpdate/LazyUpdate.upp new file mode 100644 index 000000000..d33ffd48a --- /dev/null +++ b/reference/LazyUpdate/LazyUpdate.upp @@ -0,0 +1,10 @@ +uses + Core; + +file + LazyUpdate.cpp; + +mainconfig + "" = "", + "" = "MT"; + diff --git a/reference/LazyUpdate/init b/reference/LazyUpdate/init new file mode 100644 index 000000000..a16b356f0 --- /dev/null +++ b/reference/LazyUpdate/init @@ -0,0 +1,4 @@ +#ifndef _LazyUpdate_icpp_init_stub +#define _LazyUpdate_icpp_init_stub +#include "Core/init" +#endif