+static int lmo_L_get(lua_State *L) {
+ lmo_archive_t **ar = luaL_checkudata(L, 1, LMO_ARCHIVE_META);
+ uint32_t hash = (uint32_t) luaL_checknumber(L, 2);
+ return _lmo_lookup(L, *ar, hash);
+}
+
+static int lmo_L_lookup(lua_State *L) {
+ lmo_archive_t **ar = luaL_checkudata(L, 1, LMO_ARCHIVE_META);
+ const char *key = luaL_checkstring(L, 2);
+ uint32_t hash = sfh_hash(key, strlen(key));
+ return _lmo_lookup(L, *ar, hash);
+}
+
+static int lmo_L_foreach(lua_State *L) {
+ lmo_archive_t **ar = luaL_checkudata(L, 1, LMO_ARCHIVE_META);
+ lmo_entry_t *e = (*ar)->index;
+
+ if( lua_isfunction(L, 2) )
+ {
+ while( e != NULL )
+ {
+ lua_pushvalue(L, 2);
+ lua_pushinteger(L, e->key_id);
+ lua_pushlstring(L, &(*ar)->mmap[e->offset], e->length);
+ lua_pcall(L, 2, 0, 0);
+ e = e->next;
+ }
+ }
+
+ return 0;
+}
+