Exemplo n.º 1
0
        private void AddEnumToXML(DynamicEnum dynEnum, ref XElement xmlRoot)
        {
            if (dynEnum.IsDirty)
            {
                GenerateEnum(dynEnum);
            }

            XElement xmlenum = new XElement(ENUM_ID);

            xmlenum.Add(new XAttribute(NAME_ID, dynEnum.Name));

            xmlenum.Add(new XAttribute(FLAGS_ID, dynEnum.SetAsFlags));

            foreach (KeyValuePair <string, string> field in dynEnum.StringValues)
            {
                XElement xmlfield = new XElement(FIELD_ID);

                xmlfield.Add(new XAttribute(NAME_ID, field.Key));

                xmlfield.Add(new XAttribute(VALUE_ID, field.Value));

                xmlenum.Add(xmlfield);
            }

            xmlRoot.Add(xmlenum);
        }
Exemplo n.º 2
0
        private void LoadInternal(bool generateTypes, bool loadDefault)
        {
            XDocument dxml = null;

            bool success = false;

            CachePath = GlobalHelper.PathInCurrentDirectory(CachePath, out success);

            FilePath = Path.Combine(CachePath, FilePath);

            if (!loadDefault)
            {
                if (File.Exists(FilePath))
                {
                    dxml = XDocument.Load(FilePath);
                }

                else
                {
                    dxml = XDocument.Parse(GetDefaultXML());

                    dxml.Save(FilePath);
                }
            }

            else
            {
                dxml = XDocument.Parse(GetDefaultXML());

                dxml.Save(FilePath);
            }

            XElement xmlroot = dxml.Elements(ROOT_ID).FirstOrDefault();

            foreach (XElement xmlassoc in xmlroot.Elements(ASSOCIATOR_ID))
            {
                GetAttributeAssociatorFromXML(xmlassoc);
            }

            foreach (XElement xmlenum in xmlroot.Elements(ENUM_ID))
            {
                DynamicEnum dynenum = GetEnumFromXML(xmlenum);

                if (generateTypes)
                {
                    GenerateEnum(dynenum);
                }
            }

            foreach (XElement xmlber in xmlroot.Elements(DECODE_ID))
            {
                GetBerConverterFromXML(xmlber);
            }

            foreach (XElement xmldict in xmlroot.Elements(DICT_ID))
            {
                GetDictionaryFromXML(xmldict);
            }
        }
Exemplo n.º 3
0
        public void GenerateEnum(DynamicEnum dynEnum)
        {
            if (dynEnum.Name.Length == 0)
            {
                return;
            }

            if (!dynEnum.HasValues)
            {
                return;
            }

            DynamicEnumList.RemoveSafe <string, DynamicEnum>(dynEnum.Name);

            EnumList.RemoveSafe <string, Type>(dynEnum.Name);

            try
            {
                CheckReflectionTypes();

                EnumBuilder enb = ModBuilder.DefineEnum(dynEnum.Name, TypeAttributes.Public, dynEnum.InheritedType);

                if (dynEnum.SetAsFlags)
                {
                    enb.SetCustomAttribute(new CustomAttributeBuilder(typeof(FlagsAttribute).GetConstructor(Type.EmptyTypes), new object[] { }));
                }

                foreach (KeyValuePair <string, object> field in dynEnum.Values)
                {
                    enb.DefineLiteral(field.Key, field.Value);
                }

                Type entype = enb.CreateType();

                dynEnum.IsDirty = false;

                DynamicEnumList.Add(dynEnum.Name, dynEnum);

                EnumList.Add(dynEnum.Name, entype);
            }

            catch (Exception ex)
            { ex.ToDummy(); }
        }
Exemplo n.º 4
0
        private DynamicEnum GetEnumFromXML(XElement xmlEnum)
        {
            DynamicEnum ret = new DynamicEnum();

            if (xmlEnum.Attributes(NAME_ID).FirstOrDefault() == null)
            {
                return(ret);
            }

            ret.Name = xmlEnum.Attributes(NAME_ID).FirstOrDefault().Value;

            string flags = "false";

            if (xmlEnum.Attributes(FLAGS_ID).FirstOrDefault() != null)
            {
                flags = xmlEnum.Attributes(FLAGS_ID).FirstOrDefault().Value;
            }

            bool setasflags = false;

            Boolean.TryParse(flags, out setasflags);

            ret.SetAsFlags = setasflags;

            foreach (XElement xmlfield in xmlEnum.Elements(FIELD_ID))
            {
                if (xmlfield.Attributes(NAME_ID).FirstOrDefault() != null)
                {
                    string name = xmlfield.Attributes(NAME_ID).FirstOrDefault().Value;

                    if (xmlfield.Attributes(VALUE_ID).FirstOrDefault() != null)
                    {
                        string val = xmlfield.Attributes(VALUE_ID).FirstOrDefault().Value;

                        ret.AddEnumField(name, val);
                    }
                }
            }

            return(ret);
        }