private void Decompile <T>(Unit <T> unit)
                where T : struct
            {
                Man.UnitsOfMeasurement.Number factor = Man.UnitsOfMeasurement.Number.CreateFromObject(unit.Factor);

                Man.UnitsOfMeasurement.UnitType decompiledUnit =
                    new Man.UnitsOfMeasurement.UnitType(
                        unit.Type.Name,
                        new Man.UnitsOfMeasurement.SenseExpr(TranslateDimension(unit.Sense), null /* no sense code */),
                        new Man.UnitsOfMeasurement.NumExpr(factor != null, factor, null /* no factor code */)
                        );

                decompiledUnit.Tags.AddRange(unit.Symbol);

                AddFamily(unit.Family, decompiledUnit);

                m_units.Add(decompiledUnit);
            }
            private void Decompile <T>(Scale <T> scale)
                where T : struct
            {
                string scaleRefPoint = Attribute.IsDefined(scale.Type, typeof(ScaleReferencePointAttribute)) ?
                                       (Attribute.GetCustomAttribute(scale.Type, typeof(ScaleReferencePointAttribute)) as ScaleReferencePointAttribute).Name :
                                       string.Empty;

                Man.UnitsOfMeasurement.Number   offset        = Man.UnitsOfMeasurement.Number.CreateFromObject(scale.Offset.Value);
                Man.UnitsOfMeasurement.UnitType scaleUnitType = m_units.Find(u => u.Name == scale.Unit.Type.Name);

                Man.UnitsOfMeasurement.ScaleType decompiledScale =
                    new Man.UnitsOfMeasurement.ScaleType(
                        scale.Type.Name,
                        scaleRefPoint,
                        scaleUnitType,
                        new Man.UnitsOfMeasurement.NumExpr(offset != null, offset, null /* no offset code */)
                        );

                AddFamily(scale.Family, decompiledScale);

                m_scales.Add(decompiledScale);
            }