diff options
Diffstat (limited to '')
-rw-r--r-- | sca-cpp/trunk/components/cache/partitioner.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/sca-cpp/trunk/components/cache/partitioner.cpp b/sca-cpp/trunk/components/cache/partitioner.cpp index a38c053358..8a56a7f932 100644 --- a/sca-cpp/trunk/components/cache/partitioner.cpp +++ b/sca-cpp/trunk/components/cache/partitioner.cpp @@ -143,6 +143,23 @@ const failable<value> put(const value& key, const value& val, const lvvlambda& s } /** + * Patch an item in a partition. + */ +const failable<value> patch(const value& key, const value& val, const lvvlambda& selector, const list<value>& partitions) { + + // Select partition + const failable<list<value> > p = partition(key, selector, partitions); + if (!hasContent(p)) + return mkfailure<value>(p); + + // Path item in selected partition + const lvvlambda l = car(content(p)); + l(mklist<value>("patch", key, val)); + + return trueValue; +} + +/** * Delete an item from a partition. */ const failable<value> del(const value& key, const lvvlambda& selector, const list<value>& partitions) { @@ -172,6 +189,8 @@ const tuscany::value apply(const tuscany::list<tuscany::value>& params) { return tuscany::partitioner::post(cadr(params), caddr(params), cadddr(params), cddddr(params)); if (func == "put") return tuscany::partitioner::put(cadr(params), caddr(params), cadddr(params), cddddr(params)); + if (func == "patch") + return tuscany::partitioner::patch(cadr(params), caddr(params), cadddr(params), cddddr(params)); if (func == "delete") return tuscany::partitioner::del(cadr(params), caddr(params), cdddr(params)); return tuscany::mkfailure<tuscany::value>(); |