# File lib/numru/nusdas.rb, line 1508
    def parse_index(arg, size, flag=false)
      shrink = false
      case arg
      when true
        d0 = flag ? true : 0
        nd = size
      when Integer
        d0 = arg < 0 ? size+arg : arg
        nd = 1
        shrink = true
      when Range
        d0 = arg.first
        d0 = size + d0 if d0 < 0
        d1 = arg.last
        d1 -= 1 if arg.exclude_end?
        d1 = size + d1 if d1 < 0
        nd = d1 - d0 + 1
      when Array
        d0 = arg
        nd = arg.length
        if arg.max > size-1
          raise "index exceed size-1"
        end
      else
        raise "index is invalid: #{arg.class.to_s}"
      end
      if nd > size
        raise "index is invalid"
      end
      if flag || Array===d0
        return [d0, nd, shrink]
      else
        return [d0..(d0+nd-1), nd, shrink]
      end
    end