Module:Data tables

local export = {}

local base_location = "Module:data tables"
local metadata = mw.loadData(base_location.."/metadata")
--"Module:data tables/data"
local shard_location_base = metadata["shard_location_base"][1]
local shards = metadata["shards"][1]
local tables = metadata["tables"]
--[[
		{"grc_RLBG_lemma_to_index",
		"grc_RWoodhouse_lemma_to_headwords",
		"grc_RWoodhouse_lemma_to_infinitives",
		"la_RMA_index_to_phrases",
		"grc_RCunliffe_lemma_to_index",
		"la_RMA_lemmas_no_collision_to_ix_phrase" }
]]

function load_tables_unsharded()
	function maybe_mw_load(x)
		local success, val = pcall(function() return mw.loadData(x) end)
 		if success then return val else return nil end	end
	local unsharded, i = {}, 0
    while #unsharded == i do
    	---shard_location_base
      local val = maybe_mw_load(shard_location_base.."Unsharded"..tostring(i))
      if val ~= nil then 
      	unsharded[#unsharded+1] = val end
      i = i + 1
    end
    return unsharded
end

local unsharded = load_tables_unsharded()

function map(f, xs)
	local ys = {}	
	for i,x in pairs(xs) do ys[i]=f(x) end 
	return ys
end

function map_string(f, s)
	local ys = {}	
	for i = 1,#s do ys[i]=f(s:sub(i,i)) end 
	return ys
end

function fold(f, l, xs)
	for i,x in pairs(xs) do l = f(l, x) end
	return l
end

function hash(s)
	return fold(
		function(x,y) return x + y end,
		0,
		map_string(
			function(x) return x:byte() end, s
			)
		)%shards
end

function export.list_tables()
	return map(function (x) return x end, tables)
end

function export.load_table(n)
	local t = {}
	for i = 1,shards do 
		local curr = mw.loadData(shard_location_base..(i-1))
		if curr[n] ~= nil then
			for k,v in pairs(curr[n]) do
				t[k]=v end end end
	for i,curr in pairs(unsharded) do 
		if curr[n] ~= nil then
			for k,v in pairs(curr[n]) do
				t[k]=v end end end
	return t
end

--[[
eventually: 
   1 :	loop through all unsharded if multiple
   2 :	index k in unsharded and shard separately,
		returning from unsharded preferentially		]]
function export.index_table(t, k)
    local shard = mw.loadData(shard_location_base .. hash(k))				
    if unsharded[1] ~= nil
    	and unsharded[1][t] ~= nil
    	and unsharded[1][t][k] ~= nil
    		then
    	
    	return unsharded[1][t][k]
    else
    	if shard[t] ~= nil then
    		return shard[t][k]
    	else
    		return nil
    	end
    end
end

function export.index_table_all(t, ks)
    baskets, result = {}, {}
    for i,k in pairs(ks) do 
    	h = hash(k)
    	if baskets[h] == nil then 
    		baskets[h] = {k} 
    	else 
    		baskets[h][#(baskets[h])+1] = k
    	end
    end
    for h,b in pairs(baskets) do 
    	local shard = mw.loadData(shard_location_base..h)
    	for i,k in pairs(b) do
    		-- here, loop over all unsharded if multiple
    		if unsharded ~= nil
    			and unsharded[1] ~= nil
    			and unsharded[t] ~= nil
    				then
    			result[k] = unshared[t][k]
			else 
				if shard[t][k] ~= nil then 
					result[k] = shard[t][k]
    			end
			end
		end
	end
    return result
end

function export.select(t,p)
	return nil  --Not implemented.
end

return export

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.