From 6c6b5b1bc18e16d0b40b674c8a48e0104ec73729 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Mon, 27 Feb 2017 16:40:03 +0900 Subject: Renamed logging_util.h to util.h and moved (improved) Owning<> and lookup() there Because these fall outside of SyncJob and Event context, respectively. In addition, Owning<> has gained a move assignment operator (because we have a move constructor) and assign() convenience method to take ownership over an existing container; also, Owning<>::release() is done the right way now (the previous version was copying the return value to a new container instead of releasing the old container). --- events/event.h | 48 ------------------------------------------------ 1 file changed, 48 deletions(-) (limited to 'events/event.h') diff --git a/events/event.h b/events/event.h index 12b0ebd5..f60dfb64 100644 --- a/events/event.h +++ b/events/event.h @@ -60,52 +60,4 @@ namespace QMatrixClient using Events = QVector; Events eventsFromJson(const QJsonArray& json); - - /** - * @brief Lookup a value by a key in a varargs list - * - * The below overloaded function template takes the value of its first - * argument (selector) as a key and searches for it in the key-value map - * passed in a varargs list (every next pair of arguments forms a key-value - * pair). If a match is found, the respective value is returned; otherwise, - * the last value (fallback) is returned. - * - * All options should be of the same type or implicitly castable to the - * type of the first option. Note that pointers to methods of different - * classes are of different object types, in particular. - * - * Below is an example of usage to select a parser depending on contents of - * a JSON object: - * {@code - * auto parser = lookup(obj.value["type"].toString(), - * "type1", fn1, - * "type2", fn2, - * fallbackFn); - * parser(obj); - * } - * - * The implementation is based on tail recursion; every recursion step - * removes 2 arguments (match and option). There's no selector value for the - * fallback option (the last one); therefore, the total number of lookup() - * arguments should be even: selector + n key-value pairs + fallback - * - * @note Beware of calling lookup() with a const char* selector - * (the first parameter) - most likely it won't do what you expect because - * of shallow comparison. - */ - template - ValueT lookup(SelectorT selector, KeyT key, ValueT value, Ts... remainingMapping) - { - if( selector == key ) - return value; - - // Drop the failed key-value pair and recurse with 2 arguments less. - return lookup(selector, remainingMapping...); - } - - template - ValueT lookup(SelectorT/*unused*/, ValueT fallback) - { - return fallback; - } } -- cgit v1.2.3