Example #1
0
 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);
            }
        }
Example #3
0
        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());
            }
        }
Example #4
0
 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;
            }
        }
Example #6
0
        /// <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())));
            }
        }
Example #7
0
 public Time(Tag tag, string data)
     : base(tag, StringDataParser.ParseTime(data))
 {
     VR = VR.Time;
 }
Example #8
0
 public DecimalString(Tag tag, string data)
     : base(tag, StringDataParser.ParseDecimalString(data))
 {
     VR = Enums.VR.DecimalString;
 }
Example #9
0
        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);
            }
        }
Example #10
0
 public DateTime(Tag tag, string data)
     : base(tag, StringDataParser.ParseDateTime(data))
 {
     VR = Enums.VR.DateTime;
 }
Example #11
0
        /// <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[]));
            }
        }