File: PixelCache.C

package info (click to toggle)
dxpc 3.9.2-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 1,140 kB
  • ctags: 1,253
  • sloc: cpp: 12,036; sh: 2,823; makefile: 78
file content (74 lines) | stat: -rw-r--r-- 1,484 bytes parent folder | download | duplicates (3)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "dxpcconf.h"
#include "PixelCache.H"

static const unsigned int PXC_SIZE = 7;

int PixelCache::lookup(unsigned int value, unsigned int &index)
{
    for (unsigned int i = 0; i < length_; i++)
        if (value == buffer_[i])
        {
            index = i;
            if (i)
            {
                unsigned int target = (i >> 1);

                do
                {
                    buffer_[i] = buffer_[i - 1];
                    i--;
                }
                while (i > target);
                buffer_[target] = value;
            }
            return 1;
        }

    insert(value);
    return 0;
}


unsigned int PixelCache::get(unsigned int index)
{
    unsigned int result = buffer_[index];

    if (index != 0)
    {
        unsigned int i = index;
        unsigned int target = (i >> 1);

        do
        {
            buffer_[i] = buffer_[i - 1];
            i--;
        }
        while (i > target);
        buffer_[target] = result;
    }

    return (unsigned int) result;
}


void PixelCache::insert(unsigned int value)
{
    unsigned int insertionPoint;

    if (2 >= length_)
        insertionPoint = length_;
    else
        insertionPoint = 2;
    unsigned int start;

    if (length_ >= PXC_SIZE)
        start = PXC_SIZE - 1;
    else
    {
        start = length_;
        length_++;
    }
    for (unsigned int k = start; k > insertionPoint; k--)
        buffer_[k] = buffer_[k - 1];
    buffer_[insertionPoint] = value;
}