Пример #1
0
DECLARE_TEST( hashmap, lookup )
{
	hashmap_t* map = hashmap_allocate( 31, 0 );
	char* value = (void*)(uintptr_t)1234;
	hash_t key = (hash_t)4321;
	unsigned int ikey = 0;

	for( ; ikey < 1024; ++ikey, ++key, ++value )
	{
		void* prev = hashmap_insert( map, key, value );
		EXPECT_EQ( prev, 0 );
	}
	
	for( ikey = 0, key = (hash_t)4321, value = (void*)(uintptr_t)1234; ikey < 1024; ++ikey, ++key, ++value )
	{
		void* prev = hashmap_lookup( map, key );
		EXPECT_EQ( prev, value );

		EXPECT_TRUE( hashmap_has_key( map, key ) );
		hashmap_erase( map, key );
		EXPECT_FALSE( hashmap_has_key( map, key ) );		
	}

	hashmap_deallocate( map );

	return 0;
}
Пример #2
0
DECLARE_TEST( hashmap, erase )
{
	hashmap_t* map = hashmap_allocate( 0, 0 );
	void* prev = 0;
	
	EXPECT_EQ( hashmap_lookup( map, 0 ), 0 );
	EXPECT_EQ( hashmap_size( map ), 0 );

	prev = hashmap_insert( map, 0, map );
	EXPECT_EQ( prev, 0 );
	EXPECT_EQ( hashmap_size( map ), 1 );
	EXPECT_TRUE( hashmap_has_key( map, 0 ) );
	
	prev = hashmap_erase( map, 0 );
	EXPECT_EQ( prev, map );
	EXPECT_EQ( hashmap_size( map ), 0 );
	EXPECT_FALSE( hashmap_has_key( map, 0 ) );
	
	prev = hashmap_erase( map, 0 );
	EXPECT_EQ( prev, 0 );
	EXPECT_EQ( hashmap_size( map ), 0 );
	EXPECT_FALSE( hashmap_has_key( map, 0 ) );
	
	prev = hashmap_erase( map, (hash_t)(uintptr_t)map );
	EXPECT_EQ( prev, 0 );
	EXPECT_EQ( hashmap_size( map ), 0 );	
	EXPECT_FALSE( hashmap_has_key( map, (hash_t)(uintptr_t)map ) );

	hashmap_deallocate( map );

	return 0;
}
Пример #3
0
/*
 * Loads the modules specified in the ramdisk. Loading follows this general
 * procedure:
 *
 * 1. Ensure the file is a valid ELF.
 * 2. Dynamically link with kernel functions from kernel symtab.
 * 3. Call module entry point
 */
void modules_ramdisk_load() {
	if(!ramdisk_loaded()) return;

	// Initialise some data structures
	loaded_module_map = hashmap_allocate();
	loaded_module_names = list_allocate();

	// Acquire initial placement address
	module_placement_addr = paging_get_memrange(kMemorySectionDrivers)[0];
	module_placement_end = paging_get_memrange(kMemorySectionDrivers)[1];

	// Get modules
	char *modulesToLoad = hal_config_get("modules");
	char *moduleName = strtok(modulesToLoad, " ");
	void *elf;

	// Find all modules
	while(moduleName) {
		// Attempt to load module from ramdisk
		if((elf = ramdisk_fopen(moduleName))) {
			module_load(elf, moduleName);
		}

		moduleName = strtok(NULL, " ");
	}

	KSUCCESS("Dynamically loaded modules initialised");
}
Пример #4
0
DECLARE_TEST(hashmap, allocation) {
	hashmap_t* map = hashmap_allocate(0, 0);

	EXPECT_EQ(hashmap_size(map), 0);
	EXPECT_EQ(hashmap_lookup(map, 0), 0);
	EXPECT_EQ(hashmap_lookup(map, (hash_t)(uintptr_t)map), 0);

	hashmap_deallocate(map);

	map = hashmap_allocate(13, 127);

	EXPECT_EQ(hashmap_size(map), 0);
	EXPECT_EQ(hashmap_lookup(map, 0), 0);
	EXPECT_EQ(hashmap_lookup(map, (hash_t)(uintptr_t)map), 0);

	hashmap_deallocate(map);

	return 0;
}
Пример #5
0
DECLARE_TEST( hashmap, insert )
{
	hashmap_t* map = hashmap_allocate( 0, 0 );
	void* prev = 0;
	
	EXPECT_EQ( hashmap_lookup( map, 0 ), 0 );

	prev = hashmap_insert( map, 0, map );
	EXPECT_EQ( prev, 0 );
	
	prev = hashmap_insert( map, 0, map );
	EXPECT_EQ( prev, map );
	
	prev = hashmap_insert( map, 0, 0 );
	EXPECT_EQ( prev, map );

	prev = hashmap_insert( map, 0, map );
	EXPECT_EQ( prev, 0 );
	
	prev = hashmap_insert( map, (hash_t)(uintptr_t)map, map );
	EXPECT_EQ( prev, 0 );

	EXPECT_EQ( hashmap_size( map ), 2 );
	EXPECT_EQ( hashmap_lookup( map, 0 ), map );
	EXPECT_EQ( hashmap_lookup( map, (hash_t)(uintptr_t)map ), map );

	hashmap_insert( map, 0, 0 );
	hashmap_insert( map, (hash_t)(uintptr_t)map, 0 );

	EXPECT_EQ( hashmap_size( map ), 2 );
	EXPECT_EQ( hashmap_lookup( map, 0 ), 0 );
	EXPECT_EQ( hashmap_lookup( map, (hash_t)(uintptr_t)map ), 0 );

	hashmap_deallocate( map );
	
	return 0;
}
Пример #6
0
int
lua_symbol_initialize(void) {
	_lua_symbols = hashmap_allocate(BUILD_SIZE_LUA_LOOKUP_BUCKETS, 8);
	return 0;
}
Пример #7
0
int
lua_modulemap_initialize(void) {
	_lua_modulemap = hashmap_allocate(13, 7);
	_lua_modulemap_lock = mutex_allocate(STRING_CONST("lua-modulemap"));
	return 0;
}