public Date(Tag tag, string data) : base(tag, StringDataParser.ParseDate(data)) { VR = VR.Date; }
/// <summary> /// Retrieves the default value for a parameter of the delegate. /// </summary> /// <param name="thType">The type of the parameter to retrieve.</param> /// <param name="argIndex">The index of the parameter on the method to retrieve.</param> /// <param name="defaultValue">The default value of the parameter if available.</param> /// <returns>true if the default parameter value is available, otherwise false.</returns> internal bool TryGetDefaultParameterValue(RuntimeTypeHandle thType, int argIndex, out object defaultValue) { defaultValue = null; // The LoadDefaultValueString() has the following contract // If it returns false, the delegate invoke does not have default values. // If it returns true, then the s_DefaultValueString variable is set to // describe the default values for this invoke. string defaultValueString = null; if (LoadDefaultValueString()) { defaultValueString = s_DefaultValueString; } // Group index of 0 indicates there are no default parameters if (defaultValueString == null) { return(false); } StringDataParser dataParser = new StringDataParser(defaultValueString); // Skip to current argument int curArgIndex = 0; while (curArgIndex != argIndex) { int skip = dataParser.GetInt(); dataParser.Skip(skip); curArgIndex++; } // Discard size of current argument int sizeOfCurrentArg = dataParser.GetInt(); int defaultValueType = dataParser.GetInt(); switch (defaultValueType) { case DefaultParamTypeNone: default: return(false); case DefaultParamTypeString: defaultValue = dataParser.GetString(); return(true); case DefaultParamTypeDefault: if (thType.ToEETypePtr().IsValueType) { if (thType.ToEETypePtr().IsNullable) { defaultValue = null; return(true); } else { defaultValue = RuntimeImports.RhNewObject(thType.ToEETypePtr()); return(true); } } else { defaultValue = null; return(true); } case DefaultParamTypeBool: defaultValue = (dataParser.GetInt() == 1); return(true); case DefaultParamTypeChar: defaultValue = (char)dataParser.GetInt(); return(true); case DefaultParamTypeI1: defaultValue = (sbyte)dataParser.GetInt(); return(true); case DefaultParamTypeUI1: defaultValue = (byte)dataParser.GetInt(); return(true); case DefaultParamTypeI2: defaultValue = (short)dataParser.GetInt(); return(true); case DefaultParamTypeUI2: defaultValue = (ushort)dataParser.GetInt(); return(true); case DefaultParamTypeI4: defaultValue = dataParser.GetInt(); return(true); case DefaultParamTypeUI4: defaultValue = checked ((uint)dataParser.GetLong()); return(true); case DefaultParamTypeI8: defaultValue = dataParser.GetLong(); return(true); case DefaultParamTypeUI8: defaultValue = (ulong)dataParser.GetLong(); return(true); case DefaultParamTypeR4: defaultValue = dataParser.GetFloat(); return(true); case DefaultParamTypeR8: defaultValue = dataParser.GetDouble(); return(true); case DefaultParamTypeDecimal: int[] decimalBits = new int[4]; decimalBits[0] = dataParser.GetInt(); decimalBits[1] = dataParser.GetInt(); decimalBits[2] = dataParser.GetInt(); decimalBits[3] = dataParser.GetInt(); defaultValue = new decimal(decimalBits); return(true); case DefaultParamTypeDateTime: defaultValue = new DateTime(dataParser.GetLong()); return(true); case DefaultParamTypeNoneButOptional: defaultValue = System.Reflection.Missing.Value; return(true); } }
private static unsafe object GetDefaultValue(RuntimeTypeHandle thType, int argIndex) { // Group index of 0 indicates there are no default parameters if (s_defaultValueString == null) { throw new ArgumentException(SR.Arg_DefaultValueMissingException); } StringDataParser dataParser = new StringDataParser(s_defaultValueString); // Skip to current argument int curArgIndex = 0; while (curArgIndex != argIndex) { int skip = dataParser.GetInt(); dataParser.Skip(skip); curArgIndex++; } // Discard size of current argument int sizeOfCurrentArg = dataParser.GetInt(); int defaultValueType = dataParser.GetInt(); switch (defaultValueType) { case DefaultParamTypeNone: default: throw new ArgumentException(SR.Arg_DefaultValueMissingException); case DefaultParamTypeString: return dataParser.GetString(); case DefaultParamTypeDefault: if (thType.ToEETypePtr().IsValueType) { if (RuntimeImports.RhIsNullable(thType.ToEETypePtr())) { return null; } else { return RuntimeImports.RhNewObject(thType.ToEETypePtr()); } } else { return null; } case DefaultParamTypeBool: return (dataParser.GetInt() == 1); case DefaultParamTypeChar: return (char)dataParser.GetInt(); case DefaultParamTypeI1: return (sbyte)dataParser.GetInt(); case DefaultParamTypeI2: return (short)dataParser.GetInt(); case DefaultParamTypeI4: return dataParser.GetInt(); case DefaultParamTypeI8: return dataParser.GetLong(); case DefaultParamTypeR4: return dataParser.GetFloat(); case DefaultParamTypeR8: return dataParser.GetDouble(); case DefaultParamTypeDecimal: int[] decimalBits = new int[4]; decimalBits[0] = dataParser.GetInt(); decimalBits[1] = dataParser.GetInt(); decimalBits[2] = dataParser.GetInt(); decimalBits[3] = dataParser.GetInt(); return new Decimal(decimalBits); case DefaultParamTypeDateTime: return new DateTime(dataParser.GetLong()); } }
public IntegerString(Tag tag, string data) : base(tag, StringDataParser.ParseIntegerString(data)) { VR = Enums.VR.IntegerString; }
/// <summary> /// Retrieves the default value for a parameter of the delegate. /// </summary> /// <param name="thType">The type of the parameter to retrieve.</param> /// <param name="argIndex">The index of the parameter on the method to retrieve.</param> /// <param name="defaultValue">The default value of the parameter if available.</param> /// <returns>true if the default parameter value is available, otherwise false.</returns> internal bool TryGetDefaultParameterValue(RuntimeTypeHandle thType, int argIndex, out object defaultValue) { defaultValue = null; // The LoadDefaultValueString() has the following contract // If it returns false, the delegate invoke does not have default values. // If it returns true, then the s_DefaultValueString variable is set to // describe the default values for this invoke. string defaultValueString = null; if (LoadDefaultValueString()) { defaultValueString = s_DefaultValueString; } // Group index of 0 indicates there are no default parameters if (defaultValueString == null) { return false; } StringDataParser dataParser = new StringDataParser(defaultValueString); // Skip to current argument int curArgIndex = 0; while (curArgIndex != argIndex) { int skip = dataParser.GetInt(); dataParser.Skip(skip); curArgIndex++; } // Discard size of current argument int sizeOfCurrentArg = dataParser.GetInt(); int defaultValueType = dataParser.GetInt(); switch (defaultValueType) { case DefaultParamTypeNone: default: return false; case DefaultParamTypeString: defaultValue = dataParser.GetString(); return true; case DefaultParamTypeDefault: if (thType.ToEETypePtr().IsValueType) { if (thType.ToEETypePtr().IsNullable) { defaultValue = null; return true; } else { defaultValue = RuntimeImports.RhNewObject(thType.ToEETypePtr()); return true; } } else { defaultValue = null; return true; } case DefaultParamTypeBool: defaultValue = (dataParser.GetInt() == 1); return true; case DefaultParamTypeChar: defaultValue = (char)dataParser.GetInt(); return true; case DefaultParamTypeI1: defaultValue = (sbyte)dataParser.GetInt(); return true; case DefaultParamTypeUI1: defaultValue = (byte)dataParser.GetInt(); return true; case DefaultParamTypeI2: defaultValue = (short)dataParser.GetInt(); return true; case DefaultParamTypeUI2: defaultValue = (ushort)dataParser.GetInt(); return true; case DefaultParamTypeI4: defaultValue = dataParser.GetInt(); return true; case DefaultParamTypeUI4: defaultValue = checked((uint)dataParser.GetLong()); return true; case DefaultParamTypeI8: defaultValue = dataParser.GetLong(); return true; case DefaultParamTypeUI8: defaultValue = (ulong)dataParser.GetLong(); return true; case DefaultParamTypeR4: defaultValue = dataParser.GetFloat(); return true; case DefaultParamTypeR8: defaultValue = dataParser.GetDouble(); return true; case DefaultParamTypeDecimal: int[] decimalBits = new int[4]; decimalBits[0] = dataParser.GetInt(); decimalBits[1] = dataParser.GetInt(); decimalBits[2] = dataParser.GetInt(); decimalBits[3] = dataParser.GetInt(); defaultValue = new Decimal(decimalBits); return true; case DefaultParamTypeDateTime: defaultValue = new DateTime(dataParser.GetLong()); return true; case DefaultParamTypeNoneButOptional: defaultValue = System.Reflection.Missing.Value; return true; } }
/// <summary> /// Generates a concrete element class from the VR, tag, data and string data (from XML). /// </summary> /// <param name="tag">the tag of the element to be generated</param> /// <param name="vr">the VR of the element to be generated</param> /// <param name="data">the string data of the element</param> /// <param name="syntax">the transfer syntax by which to interepret the data</param> /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns> public static IDICOMElement GenerateElementFromStringData(Tag tag, VR vr, string[] data) { switch (vr) { case VR.AttributeTag: return(new AttributeTag(tag, new Tag(data.First()))); case VR.FloatingPointDouble: return(new FloatingPointDouble(tag, data.Select(d => double.Parse(d)).ToArray())); case VR.FloatingPointSingle: return(new FloatingPointSingle(tag, data.Select(d => float.Parse(d)).ToArray())); case VR.SignedLong: return(new SignedLong(tag, data.Select(d => int.Parse(d)).ToArray())); case VR.SignedShort: return(new SignedShort(tag, data.Select(d => short.Parse(d)).ToArray())); case VR.UnsignedLong: return(new UnsignedLong(tag, data.Select(d => uint.Parse(d)).ToArray())); case VR.UnsignedShort: return(new UnsignedShort(tag, data.Select(d => ushort.Parse(d)).ToArray())); //HANDLE STRINGS case VR.AgeString: return(new AgeString(tag, data.First())); case VR.ApplicationEntity: return(new ApplicationEntity(tag, data.First())); case VR.CodeString: return(new CodeString(tag, data.First())); case VR.DecimalString: return(new DecimalString(tag, data.Select(d => double.Parse(d)).ToArray())); case VR.IntegerString: return(new IntegerString(tag, data.Select(d => int.Parse(d)).ToArray())); case VR.LongString: return(new LongString(tag, data.First())); case VR.LongText: return(new LongText(tag, data.First())); case VR.PersonName: return(new PersonName(tag, data.First())); case VR.ShortString: return(new ShortString(tag, data.First())); case VR.ShortText: return(new ShortText(tag, data.First())); case VR.UnlimitedText: return(new UnlimitedText(tag, data.First())); case VR.UniqueIdentifier: return(new UniqueIdentifier(tag, data.First())); //HANDLE DATES case VR.Date: return(new Date(tag, StringDataParser.GetNullableDate(data.First()))); case VR.DateTime: return(new DateTime(tag, StringDataParser.GetNullableDate(data.First()))); case VR.Time: return(new Time(tag, StringDataParser.GetNullableDate(data.First()))); //HANDLE BYTE DATA case VR.Sequence: return(new Sequence { Tag = tag, Items = data.Select(d => DICOMObject.FromXML(d)).ToList() }); case VR.OtherByteString: return(new OtherByteString(tag, ByteHelper.HexStringToByteArray(data.First()))); case VR.OtherFloatString: return(new OtherFloatString(tag, ByteHelper.HexStringToByteArray(data.First()))); case VR.OtherWordString: return(new OtherWordString(tag, ByteHelper.HexStringToByteArray(data.First()))); default: return(new Unknown(tag, ByteHelper.HexStringToByteArray(data.First()))); } }
public Time(Tag tag, string data) : base(tag, StringDataParser.ParseTime(data)) { VR = VR.Time; }
public DecimalString(Tag tag, string data) : base(tag, StringDataParser.ParseDecimalString(data)) { VR = Enums.VR.DecimalString; }
private static unsafe object GetDefaultValue(RuntimeTypeHandle thType, int argIndex) { // Group index of 0 indicates there are no default parameters if (s_defaultValueString == null) { throw new ArgumentException(SR.Arg_DefaultValueMissingException); } StringDataParser dataParser = new StringDataParser(s_defaultValueString); // Skip to current argument int curArgIndex = 0; while (curArgIndex != argIndex) { int skip = dataParser.GetInt(); dataParser.Skip(skip); curArgIndex++; } // Discard size of current argument int sizeOfCurrentArg = dataParser.GetInt(); int defaultValueType = dataParser.GetInt(); switch (defaultValueType) { case DefaultParamTypeNone: default: throw new ArgumentException(SR.Arg_DefaultValueMissingException); case DefaultParamTypeString: return(dataParser.GetString()); case DefaultParamTypeDefault: if (thType.ToEETypePtr().IsValueType) { if (RuntimeImports.RhIsNullable(thType.ToEETypePtr())) { return(null); } else { return(RuntimeImports.RhNewObject(thType.ToEETypePtr())); } } else { return(null); } case DefaultParamTypeBool: return(dataParser.GetInt() == 1); case DefaultParamTypeChar: return((char)dataParser.GetInt()); case DefaultParamTypeI1: return((sbyte)dataParser.GetInt()); case DefaultParamTypeI2: return((short)dataParser.GetInt()); case DefaultParamTypeI4: return(dataParser.GetInt()); case DefaultParamTypeI8: return(dataParser.GetLong()); case DefaultParamTypeR4: return(dataParser.GetFloat()); case DefaultParamTypeR8: return(dataParser.GetDouble()); case DefaultParamTypeDecimal: int[] decimalBits = new int[4]; decimalBits[0] = dataParser.GetInt(); decimalBits[1] = dataParser.GetInt(); decimalBits[2] = dataParser.GetInt(); decimalBits[3] = dataParser.GetInt(); return(new Decimal(decimalBits)); case DefaultParamTypeDateTime: return(new DateTime(dataParser.GetLong())); case DefaultParamTypeNoneButOptional: return(System.Reflection.Missing.Value); } }
public DateTime(Tag tag, string data) : base(tag, StringDataParser.ParseDateTime(data)) { VR = Enums.VR.DateTime; }
/// <summary> /// Reads string data and creates the appropriate DICOM element /// </summary> /// <param name="data">the string data as an object (fresh from the DICOM reader)</param> /// <param name="vr">the VR of the element to be generated</param> /// <returns>a concrete DICOM element that uses the interface IDICOMElement</returns> public static IDICOMElement ReadString(VR vr, Tag tag, object data, StringEncoding enc) { switch (vr) { case VR.AgeString: return(new AgeString(tag, DICOMString.Read(data as byte[], enc))); case VR.ApplicationEntity: return(new ApplicationEntity(tag, DICOMString.Read(data as byte[], enc))); case VR.CodeString: return(new CodeString() { Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc) }); case VR.Date: var dateData = DICOMString.Read(data as byte[], enc); if (dateData.Any(b => b == '-')) // Range ('-') { var parts = dateData.Split('-'); var dates = parts.Select(p => StringDataParser.ParseDate(p)).OrderBy(p => p).ToArray(); return(new Date(tag, dates) { IsRange = true }); } else { return(new Date(tag, dateData)); } case VR.DateTime: var dateTimeData = DICOMString.Read(data as byte[], enc); if (dateTimeData.Any(b => b == '-')) // Range ('-') { var parts = dateTimeData.Split('-'); var dates = parts.Select(p => StringDataParser.ParseDateTime(p)).OrderBy(p => p).ToArray(); return(new DateTime(tag, dates) { IsRange = true }); } else { return(new DateTime(tag, dateTimeData)); } case VR.DecimalString: return(new DecimalString(tag, DICOMString.Read(data as byte[], enc))); case VR.IntegerString: return(new IntegerString(tag, DICOMString.Read(data as byte[], enc))); case VR.LongString: return(new LongString(tag, DICOMString.Read(data as byte[], enc))); case VR.LongText: return(new LongText() { Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc) }); case VR.PersonName: return(new PersonName() { Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc) }); case VR.ShortString: return(new ShortString() { Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc) }); case VR.ShortText: return(new ShortText(tag, DICOMString.Read(data as byte[], enc))); case VR.Time: var timeData = DICOMString.Read(data as byte[], enc); if (timeData.Any(b => b == '-')) // Range ('-') { var parts = timeData.Split('-'); var dates = parts.Select(p => StringDataParser.ParseTime(p)).OrderBy(p => p).ToArray(); return(new Time(tag, dates) { IsRange = true }); } else { return(new Time(tag, timeData)); } case VR.UnlimitedCharacter: return(new UnlimitedCharacter() { Tag = tag, Data_ = DICOMString.ReadMultiple(data as byte[], enc) }); case VR.UnlimitedText: return(new UnlimitedText(tag, DICOMString.Read(data as byte[], enc))); case VR.UniqueIdentifier: return(new UniqueIdentifier(tag, DICOMString.Read(data as byte[], enc))); case VR.UniversalResourceId: return(new UniversalResourceId(tag, DICOMString.Read(data as byte[], enc))); default: return(new Unknown(tag, data as byte[])); } }