/// <summary> /// Create vendor extended paramters from BitArray /// </summary> /// <param name="bit_array">BitArray. Input</param> /// <param name="cursor">The current bit position to be processed.</param> /// <param name="length">Total length of the array</param> /// <returns></returns> public static ICustom_Parameter DecodeCustomParameter(ref BitArray bit_array, ref int cursor, int length) { if (cursor >= length) { return(null); } int old_cursor = cursor; PARAM_Custom param = PARAM_Custom.FromBitArray(ref bit_array, ref cursor, length); if (param != null) { string key = param.VendorID + "-" + param.SubType; if (vendorExtensionIDTypeHash != null) { try { Type tp = (Type)vendorExtensionIDTypeHash[key]; MethodInfo mis = tp.GetMethod("FromBitArray"); if (mis == null) { return(null); } cursor = old_cursor; object[] parameters = new object[] { bit_array, cursor, length }; object obj = mis.Invoke(null, parameters); cursor = (int)parameters[1]; return((ICustom_Parameter)obj); } catch { return(param); } } else { return(param); } } else { return(null); } }
public static ICustom_Parameter DecodeCustomParameter( ref BitArray bit_array, ref int cursor, int length) { if (cursor >= length) { return((ICustom_Parameter)null); } int num1 = cursor; PARAM_Custom paramCustom = PARAM_Custom.FromBitArray(ref bit_array, ref cursor, length); if (paramCustom == null) { return((ICustom_Parameter)null); } string str = paramCustom.VendorID.ToString() + "-" + (object)paramCustom.SubType; if (CustomParamDecodeFactory.vendorExtensionIDTypeHash != null) { int num2 = cursor; try { MethodInfo method = ((Type)CustomParamDecodeFactory.vendorExtensionIDTypeHash[(object)str]).GetMethod("FromBitArray"); if (method == null) { return((ICustom_Parameter)null); } cursor = num1; object[] parameters = new object[3] { (object)bit_array, (object)cursor, (object)length }; object obj = method.Invoke((object)null, parameters); cursor = (int)parameters[1]; return((ICustom_Parameter)obj); } catch { cursor = num2; } } return((ICustom_Parameter)paramCustom); }