Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7740 → Rev 7741

/programs/cmm/examples/array.c
0,0 → 1,61
#define MEMSIZE 4096*200
 
#include "../lib/window.h"
#include "../lib/array.h"
 
window win1=0;
void main()
{
win1.background = 0xFFFFFF;
win1.left = 200;
win1.top = 200;
win1.caption = "Stress test";
win1.ondraw = #draw_window;
win1.create();
}
 
Array a = {0};
Dictionary b = {0};
void draw_window()
{
dword size = 10000;
dword i = 0;
dword y = 10;
i = size;
/* ints */
a.init(0);
while(i){
a.set(i,i);
i--;
}
a.set(120,222);
a.set(9990,345);
i = size;
while(i){
if (a.get(i) != i)
{
WriteText(15, y, 0x81, 0xFF0000, itoa(i));
WriteText(95, y, 0x81, 0xFF0000, itoa(a.get(i)));
y += 25;
}
i--;
}
/* strs */
b.init(0);
i = size;
while(i){
b.set(itoa(i),i);
i--;
}
b.set("123","Okey");
i = size;
while(i){
if (b.get(itoa(i)) != i)
{
WriteText(15, y, 0x81, 0xFF0000, itoa(i));
WriteText(95, y, 0x81, 0xFF0000, b.get(itoa(i)));
y += 25;
}
i--;
}
}
/programs/cmm/lib/array.h
3,6 → 3,8
#ifndef INCLUDE_ARRAY_H
#define INCLUDE_ARRAY_H
 
#include "../lib/crc32.h"
 
// Array memory: [dword key][byte flags][dword left][dword right][dword value] -> 17 bytes = 1 position
// If key don't exists then value == 0
:struct Array
20,6 → 22,7
 
:void Array::reallocMemory(dword newSize)
{
newSize *= 17;
memory = realloc(memory, newSize);
lenInitSize = newSize;
}
34,25 → 37,27
IF (flags & 001b) && (DSDWORD[address] > key) RETURN recursiveIndex(key, DSDWORD[address + 9]); // right tree
RETURN address;
}
 
:byte Array::init(dword size)
{
IF(!size) RETURN 0;
dword pointer = 0;
if (!size) size = 8;
IF(!memory)
{
lenInitSize = size * 17;
memory = malloc(lenInitSize);
EBX = memory;
DSDWORD[EBX] = 0;
DSBYTE[EBX + 4] = 0;
DSDWORD[EBX + 5] = 0;
DSDWORD[EBX + 9] = 0;
DSDWORD[EBX + 13] = 0;
pointer = memory;
DSDWORD[pointer] = 0; pointer += 4;
DSBYTE[pointer] = 0; pointer += 1;
DSDWORD[pointer] = 0;pointer += 4;
DSDWORD[pointer] = 0;pointer += 4;
DSDWORD[pointer] = 0;
offsetMemory = 17;
RETURN 0xFF;
}
IF(size > lenInitSize)
{
reallocMemory(size * 17);
reallocMemory(size);
RETURN 0xFF;
}
RETURN 0;
97,11 → 102,11
DSDWORD[address + 13] = data;
RETURN 0xFF;
}
DSDWORD[newOffset] = key;
DSBYTE[newOffset+4] = 0;
DSDWORD[newOffset+5] = 0;
DSDWORD[newOffset+9] = 0;
DSDWORD[newOffset+13] = data;
DSDWORD[newOffset] = key; newOffset+=4;
DSBYTE[newOffset] = 0; newOffset+=1;
DSDWORD[newOffset] = 0; newOffset+=4;
DSDWORD[newOffset] = 0; newOffset+=4;
DSDWORD[newOffset] = data;
offsetMemory += 17;
RETURN 0xFF;
}
130,8 → 135,10
byte init(dword size);
};
 
:dword Dictionary::hash(dword text) // max 255 bytes as strings => 4 byte or duble word hash
:dword Dictionary::hash(dword text)
{
RETURN crc32(text, strlen(text));
/*
dword checkSum1 = 1;
dword checkSum2 = 0;
dword beginAddress = 0;
148,6 → 155,7
EAX = text - beginAddress;
EAX <<= 23;
RETURN EAX | checkSum2;
*/
}
 
:byte Dictionary::set(dword key, value)