summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/components/cache/memcache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/trunk/components/cache/memcache.cpp')
-rw-r--r--sca-cpp/trunk/components/cache/memcache.cpp51
1 files changed, 19 insertions, 32 deletions
diff --git a/sca-cpp/trunk/components/cache/memcache.cpp b/sca-cpp/trunk/components/cache/memcache.cpp
index 738a6ddd5a..2e4597efd3 100644
--- a/sca-cpp/trunk/components/cache/memcache.cpp
+++ b/sca-cpp/trunk/components/cache/memcache.cpp
@@ -37,14 +37,14 @@ namespace cache {
/**
* Get an item from the cache.
*/
-const failable<value> get(const list<value>& params, memcache::MemCached& ch) {
+const failable<value> get(const list<value>& params, const memcache::MemCached& ch) {
return memcache::get(car(params), ch);
}
/**
* Post an item to the cache.
*/
-const failable<value> post(const list<value>& params, memcache::MemCached& ch) {
+const failable<value> post(const list<value>& params, const memcache::MemCached& ch) {
const value id = append<value>(car(params), mklist(mkuuid()));
const failable<bool> val = memcache::post(id, cadr(params), ch);
if (!hasContent(val))
@@ -55,7 +55,7 @@ const failable<value> post(const list<value>& params, memcache::MemCached& ch) {
/**
* Put an item into the cache.
*/
-const failable<value> put(const list<value>& params, memcache::MemCached& ch) {
+const failable<value> put(const list<value>& params, const memcache::MemCached& ch) {
const failable<bool> val = memcache::put(car(params), cadr(params), ch);
if (!hasContent(val))
return mkfailure<value>(val);
@@ -65,7 +65,7 @@ const failable<value> put(const list<value>& params, memcache::MemCached& ch) {
/**
* Delete an item from the cache.
*/
-const failable<value> del(const list<value>& params, memcache::MemCached& ch) {
+const failable<value> del(const list<value>& params, const memcache::MemCached& ch) {
const failable<bool> val = memcache::del(car(params), ch);
if (!hasContent(val))
return mkfailure<value>(val);
@@ -73,37 +73,12 @@ const failable<value> del(const list<value>& params, memcache::MemCached& ch) {
}
/**
- * Component implementation lambda function.
- */
-class applyCache {
-public:
- applyCache(memcache::MemCached& ch) : ch(ch) {
- }
-
- const value operator()(const list<value>& params) const {
- const value func(car(params));
- if (func == "get")
- return get(cdr(params), ch);
- if (func == "post")
- return post(cdr(params), ch);
- if (func == "put")
- return put(cdr(params), ch);
- if (func == "delete")
- return del(cdr(params), ch);
- return mkfailure<value>();
- }
-
-private:
- memcache::MemCached& ch;
-};
-
-/**
* Convert a list of properties to a list of server addresses.
*/
const list<string> servers(const list<value>& params) {
if (isNil(params))
return list<string>();
- const value s = ((lambda<value(const list<value>&)>)car(params))(list<value>());
+ const value s = ((lvvlambda)car(params))(nilListValue);
return cons<string>(s, servers(cdr(params)));
}
@@ -112,10 +87,22 @@ const list<string> servers(const list<value>& params) {
*/
const failable<value> start(const list<value>& params) {
// Connect to memcached
- memcache::MemCached& ch = *(new (gc_new<memcache::MemCached>()) memcache::MemCached(servers(params)));
+ const memcache::MemCached& ch = *(new (gc_new<memcache::MemCached>()) memcache::MemCached(servers(params)));
// Return the component implementation lambda function
- return value(lambda<value(const list<value>&)>(applyCache(ch)));
+ const lvvlambda applyCache = [ch](const list<value>& params) -> const value {
+ const value func(car(params));
+ if (func == "get")
+ return get(cdr(params), ch);
+ if (func == "post")
+ return post(cdr(params), ch);
+ if (func == "put")
+ return put(cdr(params), ch);
+ if (func == "delete")
+ return del(cdr(params), ch);
+ return mkfailure<value>();
+ };
+ return value(applyCache);
}
}