예제 #1
0
        public void ChangeValue(MegaloScriptModel model, string flags)
        {
            //Contract.Requires(!string.IsNullOrEmpty(flags)); // #NOTE_BLAM: we assume null/empty means '0'

            var id_resolving_ctxt = new Proto.MegaloScriptEnum.FlagsNameResolvingContext(model.Database, ValueType);

            Value = Proto.MegaloScriptEnum.FlagsNameResolvingContext.IdResolver(id_resolving_ctxt, flags);
        }
예제 #2
0
        internal static void SerializeValue <TDoc, TCursor>(MegaloScriptModel model, IO.TagElementStream <TDoc, TCursor, string> s,
                                                            MegaloScriptValueType valueType, ref uint value,
                                                            IO.TagElementNodeType nodeType = IO.TagElementNodeType.Text, string nodeName = null)
            where TDoc : class
            where TCursor : class
        {
            Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.Flags);

            if ((model.TagElementStreamSerializeFlags & MegaloScriptModelTagElementStreamFlags.UseEnumNames) != 0)
            {
                var id_resolving_ctxt = new Proto.MegaloScriptEnum.FlagsNameResolvingContext(model.Database, valueType);
                var id_resolver       = Proto.MegaloScriptEnum.FlagsNameResolvingContext.IdResolver;
                var name_resolver     = Proto.MegaloScriptEnum.FlagsNameResolvingContext.NameResolver;

                switch (nodeType)
                {
                case IO.TagElementNodeType.Element:
                    s.StreamElementIdAsString(nodeName, ref value, id_resolving_ctxt, id_resolver, name_resolver);
                    break;

                case IO.TagElementNodeType.Attribute:
                    s.StreamAttributeIdAsString(nodeName, ref value, id_resolving_ctxt, id_resolver, name_resolver);
                    break;

                case IO.TagElementNodeType.Text:
                    s.StreamCursorIdAsString(ref value, id_resolving_ctxt, id_resolver, name_resolver);
                    break;
                }
            }
            else
            {
                switch (nodeType)
                {
                case IO.TagElementNodeType.Element:             s.StreamElement(nodeName, ref value); break;

                case IO.TagElementNodeType.Attribute:   s.StreamAttribute(nodeName, ref value); break;

                case IO.TagElementNodeType.Text:                s.StreamCursor(ref value); break;
                }
            }
        }