Microsoft.JScript.LateBinding.SwapValues C# (CSharp) Method

SwapValues() static private method

static private SwapValues ( Object obj, uint left, uint right ) : void
obj Object
left uint
right uint
return void
      internal static void SwapValues(Object obj, uint left, uint right){
        if (obj is JSObject){
          ((JSObject)obj).SwapValues(left, right);
          return;
        }
        if (obj is IList){
          IList list = (IList)obj;
          Object temp = list[(int)left];
          list[(int)left] = list[(int)right];
          list[(int)right] = temp;
          return;
        }
        if (obj is Array){
          Array arr = (Array)obj;
          Object temp = arr.GetValue((int)left);
          arr.SetValue(arr.GetValue((int)right), (int)left);
          arr.SetValue(temp, (int)right);
          return;
        }
        if (obj is IExpando){
          String left_name = System.Convert.ToString(left, CultureInfo.InvariantCulture);
          String right_name = System.Convert.ToString(right, CultureInfo.InvariantCulture);
          IExpando eob = (IExpando)obj;
          FieldInfo left_field = eob.GetField(left_name, BindingFlags.Instance|BindingFlags.Public);
          FieldInfo right_field = eob.GetField(right_name, BindingFlags.Instance|BindingFlags.Public);
          if (left_field == null)
            if (right_field == null)
              return;
            else
              try{
                left_field = eob.AddField(left_name);
                left_field.SetValue(obj, right_field.GetValue(obj));
                eob.RemoveMember(right_field);
              }catch{
                throw new JScriptException(JSError.ActionNotSupported);
              }
          else if (right_field == null)
            try{
              right_field = eob.AddField(right_name);
              right_field.SetValue(obj, left_field.GetValue(obj));
              eob.RemoveMember(left_field);
            }catch{
              throw new JScriptException(JSError.ActionNotSupported);
            }
          Object temp = left_field.GetValue(obj);
          left_field.SetValue(obj, right_field.GetValue(obj));
          right_field.SetValue(obj, temp);
          return;
        }
        Object lval = LateBinding.GetValueAtIndex(obj, left);
        Object rval = LateBinding.GetValueAtIndex(obj, right);
        if (lval is Missing)
          LateBinding.DeleteValueAtIndex(obj, right);
        else
          LateBinding.SetValueAtIndex(obj, right, lval);
        if (rval is Missing)
          LateBinding.DeleteValueAtIndex(obj, left);
        else
          LateBinding.SetValueAtIndex(obj, left, rval);
      }

Usage Example

        internal void SortObject(long left, long right)
        {
            object obj3;

            if (right <= left)
            {
                return;
            }
            long num = left + ((long)((right - left) * MathObject.random()));

            LateBinding.SwapValues(this.obj, (uint)num, (uint)right);
            object valueAtIndex = LateBinding.GetValueAtIndex(this.obj, (ulong)right);
            long   num2         = left - 1L;
            long   num3         = right;

Label_0039:
            obj3 = LateBinding.GetValueAtIndex(this.obj, (ulong)(num2 += 1L));
            if ((num2 < num3) && (this.Compare(valueAtIndex, obj3) >= 0))
            {
                goto Label_0039;
            }
            do
            {
                obj3 = LateBinding.GetValueAtIndex(this.obj, (ulong)(num3 -= 1L));
            }while ((num3 > num2) && (this.Compare(valueAtIndex, obj3) <= 0));
            if (num2 < num3)
            {
                LateBinding.SwapValues(this.obj, (uint)num2, (uint)num3);
                goto Label_0039;
            }
            LateBinding.SwapValues(this.obj, (uint)num2, (uint)right);
            this.SortObject(left, num2 - 1L);
            this.SortObject(num2 + 1L, right);
        }
All Usage Examples Of Microsoft.JScript.LateBinding::SwapValues