def demand
      if variables.empty?
        index = @index.simplify
        if @m.dimension > 0
          @m.shape.last.times do |i|
            m = @m.element INT.new( i )
            dest = @dest.element INT.new( i )
            default = @default.dimension > 0 ?
                      @default.element( INT.new( i ) ) : @default
            Unmask.new( dest, @source, m, index, default ).demand
          end  
        else
          @m.if_else( proc do
            Store.new( @dest, @source.element( index ) ).demand
            index.assign index + 1
          end, proc do
            Store.new( @dest, @default ).demand
          end )
        end
        if @index.is_a? Pointer_
          @index.store index
        else
          @index.assign index
        end
        @dest
      else
        super
      end
    end
def demand
      if variables.empty?
        index = @index.simplify
        if @m.dimension > 0
          @m.shape.last.times do |i|
            m = @m.element INT.new( i )
            dest = @dest.element INT.new( i )
            default = @default.dimension > 0 ?
                      @default.element( INT.new( i ) ) : @default
            Unmask.new( dest, @source, m, index, default ).demand
          end  
        else
          @m.if_else( proc do
            Store.new( @dest, @source.element( index ) ).demand
            index.assign index + 1
          end, proc do
            Store.new( @dest, @default ).demand
          end )
        end
        if @index.is_a? Pointer_
          @index.store index
        else
          @index.assign index
        end
        @dest
      else
        super
      end
    end
Perform masking operation

 @return [Node] Result of computation

 @private