module Misc def log2(x) e = 0 while (1 << e) < x x -= (1 << e) e += 1 # for rouding down (rounding up: remove this line) end e end def array(*args) return Array.new(*args) if args.length == 2 Array.new(args[0]).map { Misc::array(*args[1..args.length]) } end def loopCE # TODO: (maybe) improve it to also include element info (if exists) NUM_CUSTOM_ELEMENTS.times do |i| yield (EL_CUSTOM_START + i) end end def loop2d(xsize,ysize) ysize.times do |y| xsize.times do |x| yield x,y end end end def loop3d(zsize,xsize,ysize) zsize.times do |z| ysize.times do |y| xsize.times do |x| yield z,x,y end end end end def fill2dArray(a, x, y) loop2d(x, y) do |x,y| a[x][y] = yield x,y end end def fill3dArray(a, z, x, y) loop3d(z, x, y) do |z,x,y| a[z][x][y] = yield z,x,y end end def toBool(x) # numbers are true if they are 1 # other objects are true if they aren't nil return x if x.is_a? Boolean (val.is_a? Numeric ? (x == 1) : (x != nil)) end def version(a,b,c,d) a*1000000 + b*10000 + c*100 + d end def version2array(v) [v / 1000000, (v % 1000000) / 10000, (v % 10000) / 100, (v) % 100] end def multigsub(str, gsubs) gsubs.each { |pat, rep| str = str.gsub(pat, rep) } str end end #-## VERSION_IDENT(a,b,c,d) = Misc::version(a,b,c,d)