Blame view

build6/epsilon-master/apps/shared/function_store.cpp 1.45 KB
6663b6c9   adorian   projet complet av...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  #include "function_store.h"
  #include <assert.h>
  
  namespace Shared {
  
  FunctionStore::FunctionStore() :
    ExpressionModelStore()
  {
  }
  
  Function * FunctionStore::activeFunctionAtIndex(int i) {
    assert(i >= 0 && i < numberOfActiveFunctions());
    int index = 0;
    for (int k = 0; k < m_numberOfModels; k++) {
      Function * function = modelAtIndex(k);
      if (function->isActive() && function->isDefined()) {
        if (i == index) {
          return function;
        }
        index++;
      }
    }
    assert(false);
    return nullptr;
  }
  
  int FunctionStore::numberOfActiveFunctions() {
    int result = 0;
    for (int i = 0; i < m_numberOfModels; i++) {
      Function * function = modelAtIndex(i);
      if (function->isDefined() && function->isActive()) {
        result++;
      }
    }
    return result;
  }
  
  template<typename T>
  T FunctionStore::firstAvailableAttribute(T attributes[], AttributeGetter<T> attribute) {
    for (int k = 0; k < maxNumberOfModels(); k++) {
      int j = 0;
      while  (j < m_numberOfModels) {
        if (attribute(modelAtIndex(j)) == attributes[k]) {
          break;
        }
        j++;
      }
      if (j == m_numberOfModels) {
        return attributes[k];
      }
    }
    return attributes[0];
  }
  
  }
  
  template char const* const Shared::FunctionStore::firstAvailableAttribute<char const* const>(char const* const*, char const* const (*)(Shared::Function*));
  template KDColor const Shared::FunctionStore::firstAvailableAttribute<KDColor const>(KDColor const*, KDColor const (*)(Shared::Function*));