class Ks_Archive_Data attr_accessor :id, :size #INDEX_NAME = "%s/%s_index.rvdata" FILE_NAME = "%s/%s_%05d.rvdata" #DataManager.add_initc(self) LOADED_ARCHIVES = Hash.new{|has, klass| has[klass] = Hash.new{|hac, id| #p "load_archive #{sprintf(klass::FILE_NAME_TEMPLATE, id)}" if $TEST hac[id] = load_data(sprintf(klass::FILE_NAME, klass::FILE_PATH, klass::FILE_NAME_TEMPLATE, id)) rescue klass.new } } class << self #-------------------------------------------------------------------------- # ○ キャッシュ初期化 #-------------------------------------------------------------------------- def init LOADED_ARCHIVES.clear end #-------------------------------------------------------------------------- # ○ アーカイブの読み込み・参照 #-------------------------------------------------------------------------- def get(klass, archive_id) LOADED_ARCHIVES[klass][archive_id] end #-------------------------------------------------------------------------- # ○ アーカイブの読み込み・参照 #-------------------------------------------------------------------------- def index(klass) LOADED_ARCHIVES[klass][0] end if $TEST #-------------------------------------------------------------------------- # ○ listからアーカイブを生成。 #-------------------------------------------------------------------------- def create_archive_files(klass, list) base = klass::FILE_NAME path = klass::FILE_PATH name = klass::FILE_NAME_TEMPLATE begin Dir.mkdir(path) rescue end list.each{|id, data| data = klass.new(data) data.id = id save_data(data, sprintf(base, path, name, id)) #p sprintf("_________________________%s_%s_%05d_________________________", path, name, id).to_sym, data.to_s, *data.instance_variables.collect{|key| "#{key} => #{data.instance_variable_get(key)}"} } data = klass.new({:id=>0, :size=>list.size}) save_data(data, sprintf(base, path, name, 0)) end end end #-------------------------------------------------------------------------- # ● コンストラクタ #-------------------------------------------------------------------------- def initialize(params = {}) @id = 0 super() params.each{|key, value| instance_variable_set(key.to_variable, value) } end end class Ks_Archive_Zatudan < Ks_Archive_Data attr_accessor :part_data, :data FILE_PATH = "data/_archive_zatudan" FILE_NAME_TEMPLATE = "zatudan" class << self #-------------------------------------------------------------------------- # ○ アーカイブの読み込み・参照 #-------------------------------------------------------------------------- def [](part, archive_id) self::LOADED_ARCHIVES[self][part_num_bias(part) + archive_id] end #-------------------------------------------------------------------------- # ○ アーカイブの読み込み・参照 #-------------------------------------------------------------------------- def index self::LOADED_ARCHIVES[self][0] end #-------------------------------------------------------------------------- # ○ パート番号によるバイアス値 #-------------------------------------------------------------------------- def part_num_bias(part) part * 1000 end end end