source: trunk/IPs/systemC/processor/Morpheo/Common/include/Max.h @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 1.5 KB
Line 
1#ifndef Morpheo_Max_h
2#define Morpheo_Max_h
3
4/*
5 * $Id: Max.h 88 2008-12-10 18:31:39Z rosiere $
6 *
7 * [ Description ]
8 *
9 */
10
11#include <stdint.h>
12
13namespace morpheo {
14
15  template<typename T> inline T max (T * x, uint32_t size)
16  {
17    T res = x[0];
18
19    for (uint32_t i=1; i<size; i++)
20      {
21        T tmp = x[i];
22        if (res<tmp)
23          res = tmp;
24      }
25
26    return res;
27  }
28
29  template<typename T> inline T max (T ** x, uint32_t size1, uint32_t size2)
30  {
31    T res = max(x[0],size2);
32
33    for (uint32_t i=1; i<size1; i++)
34      {
35        T tmp = max(x[i],size2);
36        if (res<tmp)
37          res = tmp;
38      }
39
40    return res;
41  }
42
43  template<typename T> inline T max (T ** x, uint32_t size1, uint32_t * size2)
44  {
45    T res = max(x[0],size2[0]);
46
47    for (uint32_t i=1; i<size1; i++)
48      {
49        T tmp = max(x[i],size2[i]);
50        if (res<tmp)
51          res = tmp;
52      }
53
54    return res;
55  }
56
57
58  template<typename T> inline T max (T * x, uint32_t size, uint32_t n)
59  {
60    if ((n==0) or (n>size))
61      return max<T>(x,size);
62
63    // validity array
64    bool val [size];
65    for (uint32_t i=0; i<size; i++)
66      val [i] = true;
67
68    // find min
69    T min = x[0];
70
71    for (uint32_t i=1; i<size; i++)
72      if (min>x[i])
73        min = x[i];
74   
75    // find n max
76    T res = min;
77    for (uint32_t i=0; i<n; i++)
78      {
79
80        uint32_t index = 0;
81        res = min; // always take the minor
82        for (uint32_t j=0; j<size; j++)
83          if ((res<x[j]) and val[j]) // find greater value, and slot is valid
84            {
85              res   = x[j];
86              index = j;
87            }
88        val [index] = false; // invalid this value
89      }
90
91    return res;
92  }
93
94 
95}; // end namespace morpheo             
96
97#endif
Note: See TracBrowser for help on using the repository browser.