annotate TaskManager/kernel/memory/MemHash.cc @ 638:671fca057ad3

hmmmm
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 19 Nov 2009 18:18:20 +0900
parents 60aa3f241b10
children 3b9536925fb8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
184
gongo@gendarme.cr.ie.u-ryukyu.ac.jp
parents: 173
diff changeset
1 #include <stdio.h>
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
2 #include <string.h>
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
3 #include <stdlib.h>
383
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
4 #include "MemHash.h"
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
5
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
6 static unsigned short PRIME[8] = {
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
7 0x002, 0x065, 0x0c7, 0x133, 0x191, 0x1f3, 0x259, 0x2bd,
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
8 };
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
9
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
10 int
625
60aa3f241b10 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 388
diff changeset
11 MemHash::hash(memaddr data0)
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
12 {
625
60aa3f241b10 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 388
diff changeset
13 long data = (long)data0;
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
14 int value = 0;
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
15 int n = 0;
625
60aa3f241b10 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 388
diff changeset
16 long key;
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
17
380
b4b8345b5366 ps3 fix
e065701@localhost.localdomain
parents: 352
diff changeset
18 for (uint32 i = 0; i < sizeof(memaddr) * 2; i ++) {
352
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
19 key = data & 0xf;
380
b4b8345b5366 ps3 fix
e065701@localhost.localdomain
parents: 352
diff changeset
20 value += key * PRIME[n++ & 7];
352
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
21 data >>= 4;
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
22 }
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
23
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
24 return value % hashSize;
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
25 }
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
26
388
82cb9368e3ff MemHash (OS X version)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 387
diff changeset
27 MemHash::MemHash()
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
28 {
383
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
29 table = (MemorySegmentPtr*)malloc(tableSize);
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
30 clear();
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
31 }
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
32
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
33 int
383
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
34 MemHash::put(memaddr key, MemorySegmentPtr data)
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
35 {
380
b4b8345b5366 ps3 fix
e065701@localhost.localdomain
parents: 352
diff changeset
36 int hashval = hash(key);
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
37
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
38 for (int i = 0; i < hashSize/2; i++) {
352
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
39 int index = (hashval + i*i)%hashSize;
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
40
352
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
41 if (table[index] == 0) { // 空の table に入れる
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
42 table[index] = data;
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
43 return index;
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
44 }
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
45 }
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
46
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
47 return -1;
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
48 }
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
49
383
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
50 MemorySegmentPtr
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
51 MemHash::get(memaddr key)
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
52 {
380
b4b8345b5366 ps3 fix
e065701@localhost.localdomain
parents: 352
diff changeset
53 int hashval = hash(key);
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
54
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
55 for (int i = 0; i < hashSize/2; i++) {
352
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
56 int index = (hashval + i*i)%hashSize;
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
57
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
58 if (table[index] != NULL &&
380
b4b8345b5366 ps3 fix
e065701@localhost.localdomain
parents: 352
diff changeset
59 table[index]->address == key) {
352
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
60 return table[index];
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
61 }
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
62 }
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
63
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
64 return NULL;
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
65 }
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
66
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
67 void
383
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
68 MemHash::remove(memaddr key)
173
56be4a6e5513 add scale
gongo@localhost.localdomain
parents: 167
diff changeset
69 {
380
b4b8345b5366 ps3 fix
e065701@localhost.localdomain
parents: 352
diff changeset
70 int hashval = hash(key);
173
56be4a6e5513 add scale
gongo@localhost.localdomain
parents: 167
diff changeset
71
56be4a6e5513 add scale
gongo@localhost.localdomain
parents: 167
diff changeset
72 for (int i = 0; i < hashSize/2; i++) {
352
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
73 int index = (hashval + i*i)%hashSize;
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
74
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
75 if (table[index] != NULL &&
380
b4b8345b5366 ps3 fix
e065701@localhost.localdomain
parents: 352
diff changeset
76 table[index]->address == key) {
352
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
77 table[index] = NULL;
3f5289873643 add global_alloc.h
admin@mb22-no-macbook-2.local
parents: 210
diff changeset
78 }
173
56be4a6e5513 add scale
gongo@localhost.localdomain
parents: 167
diff changeset
79 }
56be4a6e5513 add scale
gongo@localhost.localdomain
parents: 167
diff changeset
80 }
56be4a6e5513 add scale
gongo@localhost.localdomain
parents: 167
diff changeset
81
56be4a6e5513 add scale
gongo@localhost.localdomain
parents: 167
diff changeset
82 void
383
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
83 MemHash::clear(void)
167
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
84 {
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
85 bzero(table, tableSize);
c8b868871dce DrawSpan で使う Tile の Hash の扱いは class TileHash を生成する事に。
gongo@localhost.localdomain
parents:
diff changeset
86 }
383
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
87
25c820b6060e fix header, MemHash in kernel
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 380
diff changeset
88 /* end */