public override DoubleHolder Ptr(DoubleHolder x) { if (director_classes.PrintDebug) { Console.WriteLine("CSharpDerived - Ptr({0})", x.val); } return(x); }
internal override bool Transform(string propName, string propData, ResolutionContext ctx, ConvertionManager cm, ExtensionResolution ex) { // convert to custom type (with an ObjectConverter registered in ConvertionManager). var objectConverter = cm.TryGet(typeof(string), ExtensionDataType); if (objectConverter == null) { return(false); } // if an property value is provided for the property name, try to convert it. object propValue; if (!objectConverter.TryConvert(propData, out propValue)) { return(false); } var holder = new DoubleHolder(propValue); ex.Data.AddDataHolder(propName, holder); return(true); }
void makeCalls(Caller myCaller, Base myBase) { string NAMESPACE = "director_classesNamespace."; myCaller.set(myBase); DoubleHolder dh = new DoubleHolder(444.555); // Class pointer, reference and pass by value tests if (myCaller.ValCall(dh).val != dh.val) { throw new Exception("failed"); } if (myCaller.RefCall(dh).val != dh.val) { throw new Exception("failed"); } if (myCaller.PtrCall(dh).val != dh.val) { throw new Exception("failed"); } // Fully overloaded method test (all methods in base class are overloaded) if (NAMESPACE + myCaller.FullyOverloadedCall(10) != myBase.GetType() + "::FullyOverloaded(int)") { throw new Exception("failed"); } if (NAMESPACE + myCaller.FullyOverloadedCall(true) != myBase.GetType() + "::FullyOverloaded(bool)") { throw new Exception("failed"); } // Semi overloaded method test (some methods in base class are overloaded) if (NAMESPACE + myCaller.SemiOverloadedCall(-678) != myBase.GetType() + "::SemiOverloaded(int)") { throw new Exception("failed"); } if (myCaller.SemiOverloadedCall(true) != "Base" + "::SemiOverloaded(bool)") { throw new Exception("failed"); } // Default parameters methods test if (NAMESPACE + myCaller.DefaultParmsCall(10, 2.2) != myBase.GetType() + "::DefaultParms(int, double)") { throw new Exception("failed"); } if (myBase.GetType() == typeof(CSharpDerived)) // special handling for C# derived classes, there is no way to do this any other way { if (NAMESPACE + myCaller.DefaultParmsCall(10) != myBase.GetType() + "::DefaultParms(int, double)") { throw new Exception("failed"); } } else { if (NAMESPACE + myCaller.DefaultParmsCall(10) != myBase.GetType() + "::DefaultParms(int)") { throw new Exception("failed"); } } myCaller.reset(); }
void makeCalls(Caller myCaller, Base myBase) { string NAMESPACE = "director_classesNamespace."; myCaller.set(myBase); DoubleHolder dh = new DoubleHolder(444.555); // Class pointer, reference and pass by value tests if (myCaller.ValCall(dh).val != dh.val) throw new Exception("failed"); if (myCaller.RefCall(dh).val != dh.val) throw new Exception("failed"); if (myCaller.PtrCall(dh).val != dh.val) throw new Exception("failed"); // Fully overloaded method test (all methods in base class are overloaded) if (NAMESPACE + myCaller.FullyOverloadedCall(10) != myBase.GetType() + "::FullyOverloaded(int)") throw new Exception("failed"); if (NAMESPACE + myCaller.FullyOverloadedCall(true) != myBase.GetType() + "::FullyOverloaded(bool)") throw new Exception("failed"); // Semi overloaded method test (some methods in base class are overloaded) if (NAMESPACE + myCaller.SemiOverloadedCall(-678) != myBase.GetType() + "::SemiOverloaded(int)") throw new Exception("failed"); if (myCaller.SemiOverloadedCall(true) != "Base" + "::SemiOverloaded(bool)") throw new Exception("failed"); // Default parameters methods test if (NAMESPACE + myCaller.DefaultParmsCall(10, 2.2) != myBase.GetType() + "::DefaultParms(int, double)") throw new Exception("failed"); if (myBase.GetType() == typeof(CSharpDerived)) { // special handling for C# derived classes, there is no way to do this any other way if (NAMESPACE + myCaller.DefaultParmsCall(10) != myBase.GetType() + "::DefaultParms(int, double)") throw new Exception("failed"); } else { if (NAMESPACE + myCaller.DefaultParmsCall(10) != myBase.GetType() + "::DefaultParms(int)") throw new Exception("failed"); } myCaller.reset(); }
public override DoubleHolder Ptr(DoubleHolder x) { if (director_classes.PrintDebug) Console.WriteLine("CSharpDerived - Ptr({0})", x.val); return x; }
// Notes that this method will load the related assembly which defined the IExtensionBuilder implementation into memory. /// <summary> /// The required properties of extension builder (marked by ExtensionDataAttribute) must be provided by the extension data. /// </summary> /// <returns></returns> internal static bool ExtensionDataMatchesExtensionBuilder(this ExtensionResolution ex, IMessageDialog dialog, ResolutionContext ctx, ConvertionManager convertionManager) { var ebProperties = ex.ExtensionBuilder.Type.GetSettableRuntimeProperties(); if (ebProperties == null) { return(true); } var data = ex.Data; foreach (var ebProp in ebProperties) { var propName = ebProp.Name; string propInput; if (!data.TryGetString(propName, out propInput)) { var exPropAttrib = ebProp.GetCustomAttribute <ExtensionPropertyAttribute>(false, false); if (exPropAttrib != null && exPropAttrib.Required) { dialog.AddError("a required property is missing!"); return(false); } continue; } #region specific types if (ebProp.PropertyType == typeof(string)) { var holder = new StringHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } // convert to TypeId if (ebProp.PropertyType == typeof(TypeId)) { TypeResolution type; // a type dependency is introduced here. // should it be added to the current addin's reference set? if (!ctx.TryGetAddinType(ex.DeclaringAddin, propInput, out type)) { dialog.AddError(""); return(false); } var holder = new LazyTypeIdHolder(type); data.AddSerializableHolder(propName, holder); continue; } #endregion // convert to custom type (with an ObjectConverter registered in ConvertionManager). var objectConverter = convertionManager.TryGet(typeof(string), ebProp.PropertyType); if (objectConverter == null) { dialog.AddError("No converter is registered for !"); return(false); } // if an property value is provided for the property name, try to convert it. object propValue; if (!objectConverter.TryConvert(propInput, out propValue)) { dialog.AddError("The string [] can not be converted to !"); return(false); } #region common types if (ebProp.PropertyType == typeof(Int32)) { var holder = new Int32Holder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Boolean)) { var holder = new BooleanHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Version)) { var holder = new VersionHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(DateTime)) { var holder = new DateTimeHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Guid)) { var holder = new GuidHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(TimeSpan)) { var holder = new TimeSpanHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Int64)) { var holder = new Int64Holder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(UInt64)) { var holder = new UInt64Holder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(UInt32)) { var holder = new UInt32Holder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Int16)) { var holder = new Int16Holder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(UInt16)) { var holder = new UInt16Holder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Byte)) { var holder = new ByteHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(SByte)) { var holder = new SByteHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Char)) { var holder = new CharHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Decimal)) { var holder = new DecimalHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Double)) { var holder = new DoubleHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } if (ebProp.PropertyType == typeof(Single)) { var holder = new SingleHolder(propInput); data.AddSerializableHolder(propName, holder); continue; } #endregion } return(true); }