#include "storage_function_store.h" #include "storage_cartesian_function.h" #include namespace Shared { template int StorageFunctionStore::numberOfActiveFunctions() { int result = 0; int modelsCount = StorageExpressionModelStore::numberOfModels(); for (int i = 0; i < modelsCount; i++) { T function = StorageExpressionModelStore::modelAtIndex(i); if (function.isDefined() && function.isActive()) { result++; } } return result; } template T StorageFunctionStore::activeFunctionAtIndex(int i) { assert(i >= 0 && i < numberOfActiveFunctions()); int index = 0; int modelsCount = StorageExpressionModelStore::numberOfModels(); for (int k = 0; k < modelsCount; k++) { T function = StorageExpressionModelStore::modelAtIndex(k); if (function.isActive() && function.isDefined()) { if (i == index) { return function; } index++; } } assert(false); return nullptr; } template template U StorageFunctionStore::firstAvailableAttribute(U attributes[], AttributeGetter attribute) { int modelsCount = StorageExpressionModelStore::numberOfModels(); for (int k = 0; k < 4/*TODO*/; k++) { int j = 0; while (j < modelsCount) { if (attribute(StorageExpressionModelStore::modelAtIndex(j)) == attributes[k]) { break; } j++; } if (j == modelsCount) { return attributes[k]; } } return attributes[0]; } } //TODO specify templates template class Shared::StorageFunctionStore; /*template char const* const Shared::StorageFunctionStore::firstAvailableAttribute(char const* const*, char const* const (*)(Shared::StorageFunction)); template KDColor const Shared::StorageFunctionStore::firstAvailableAttribute(KDColor const*, KDColor const (*)(Shared::StorageFunction));*/