Пример #1
0
 public MegaloScriptPoint3dValue(MegaloScriptValueType valueType) : base(valueType)
 {
     Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.Point3d);
 }
Пример #2
0
        public TEnum BitDecode(ulong bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires(!traits.IsEmpty);

            return(BitDecode(bits, traits.BitIndex));
        }
Пример #3
0
        public static ActiveListDesc <T> CreateForNullData(int capacity, bool fixedLength = true)
        {
            Contract.Requires(capacity >= 0);

            return(new ActiveListDesc <T>(capacity, fixedLength));
        }
Пример #4
0
        public void ChangeValue(MegaloScriptModel model, string indexName)
        {
            Contract.Requires(!string.IsNullOrEmpty(indexName));

            Value = model.GetTargetIndexFromName(ValueType.IndexTarget, indexName);
        }
Пример #5
0
        public EnumBitEncoder64(int defaultBitIndex)
        {
            Contract.Requires(defaultBitIndex >= 0);

            mDefaultBitIndex = defaultBitIndex;
        }
        public bool StreamDBID <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s,
                                               string xmlName, ref int dbid,
                                               Phx.DatabaseObjectKind kind,
                                               bool isOptional = true, IO.TagElementNodeType xmlSource = XmlUtil.kSourceElement)
            where TDoc : class
            where TCursor : class
        {
            Contract.Requires(xmlSource.RequiresName() == (xmlName != XML.XmlUtil.kNoXmlName));

            string id_name      = null;
            bool   was_streamed = true;
            bool   to_lower     = ToLowerName(kind);

            if (s.IsReading)
            {
                if (isOptional)
                {
                    was_streamed = s.StreamStringOpt(xmlName, ref id_name, to_lower, xmlSource, intern: true);
                }
                else
                {
                    s.StreamString(xmlName, ref id_name, to_lower, xmlSource, intern: true);
                }

                if (was_streamed)
                {
                    dbid = Database.GetId(kind, id_name);
                    Contract.Assert(dbid.IsNotNone());
                    if (PhxUtil.IsUndefinedReferenceHandle(dbid))
                    {
                        TraceUndefinedHandle(s, id_name, xmlName, dbid, kind.ToString());
                    }
                }
                else
                {
                    dbid = TypeExtensions.kNone;
                }
            }
            else if (s.IsWriting)
            {
                if (dbid.IsNone())
                {
                    was_streamed = false;
                    return(was_streamed);
                }

                id_name = Database.GetName(kind, dbid);
                Contract.Assert(!string.IsNullOrEmpty(id_name));

                if (isOptional)
                {
                    s.StreamStringOpt(xmlName, ref id_name, to_lower, xmlSource, intern: true);
                }
                else
                {
                    s.StreamString(xmlName, ref id_name, to_lower, xmlSource, intern: true);
                }
            }

            return(was_streamed);
        }
Пример #7
0
        public void UpdateHeader(ref EcfHeader header)
        {
            Contract.Requires <InvalidOperationException>(HeaderId != 0);

            header.InitializeChunkInfo(HeaderId, ChunkExtraDataSize);
        }
Пример #8
0
        public static BitFieldTraits For <TUInt>(IEnumBitEncoder <TUInt> enumEncoder, BitFieldTraits prev)
        {
            Contract.Requires(enumEncoder != null);

            return(new BitFieldTraits(enumEncoder.BitCountTrait, prev));
        }
        public void RemapTriggerReference(ref int triggerIndex)
        {
            Contract.Requires(triggerIndex.IsNotNone());

            RemapTriggerIndex(ref triggerIndex);
        }
Пример #10
0
 public BitFieldTraits(int bitCount)
     : this(false, bitCount, 0)
 {
     Contract.Requires <ArgumentOutOfRangeException>(bitCount > 0 && bitCount <= kMaxBitCount);
 }
Пример #11
0
 public BitFieldTraits(int bitCount, BitFieldTraits prev)
     : this(false, bitCount, prev.NextFieldBitIndex)
 {
     Contract.Requires <ArgumentOutOfRangeException>(bitCount > 0 && bitCount <= kMaxBitCount);
     Contract.Requires <ArgumentException>((prev.NextFieldBitIndex + bitCount) <= kMaxBitCount);
 }
Пример #12
0
        public Collections.IBTypeNames GetNamesInterface(HPBarDataObjectKind kind)
        {
            Contract.Requires <ArgumentOutOfRangeException>(kind != HPBarDataObjectKind.None);

            return(HPBars.GetNamesInterface(kind));
        }
Пример #13
0
 public MegaloScriptBoolValue(MegaloScriptValueType valueType) : base(valueType)
 {
     Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.Bool);
 }
Пример #14
0
 public MegaloScriptVarIndexValue(MegaloScriptValueType valueType) : base(valueType)
 {
     Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.Var);
 }
Пример #15
0
 public TextLineInfo(ITextLineInfo otherLineInfo) : this(otherLineInfo.LineNumber, otherLineInfo.LinePosition)
 {
     Contract.Requires <ArgumentNullException>(otherLineInfo != null);
 }
Пример #16
0
        public void Postprocess(MegaloStaticDatabase associatedStaticDb, TextWriter errorWriter = null)
        {
            Contract.Requires(associatedStaticDb != null);

            // #REVIEW_BLAM: I've added TraceInformation calls now, can we get rid of the TextWriter?

            this.StaticDatabase = associatedStaticDb;

            #region ValueTypes
            foreach (var type in ValueTypes)
            {
                if (type.BaseType.RequiresBitLength() && type.BitLength == 0)
                {
                    string msg = string.Format("ValueType '{0}' doesn't define bitLength", ValueTypeNames[type.NameIndex]);

                    Debug.Trace.MegaloProto.TraceInformation(msg);
                    errorWriter?.WriteLine(msg);
                }

                switch (type.BaseType)
                {
                case MegaloScriptValueBaseType.Flags:
                {
                    var etype         = Enums[type.EnumIndex];
                    int bc_difference = etype.ValidBitLengthForFlags(type.BitLength);
                    if (bc_difference < 0)
                    {
                        string msg = string.Format("Flags '{0}->{1}' bitLength '{2}' is too small (need {3} more bits)",
                                                   etype.Name, ValueTypeNames[type.NameIndex],
                                                   type.BitLength, -bc_difference);

                        Debug.Trace.MegaloProto.TraceInformation(msg);
                        errorWriter?.WriteLine(msg);
                    }
                } break;

                case MegaloScriptValueBaseType.Enum:
                {
                    var etype         = Enums[type.EnumIndex];
                    int bc_difference = etype.ValidBitLengthForEnum(type.BitLength, type.EnumTraits);
                    if (bc_difference < 0)
                    {
                        string msg = string.Format("Enum '{0}->{1}' bitLength '{2}' is too small (need {3} more bits)",
                                                   etype.Name, ValueTypeNames[type.NameIndex],
                                                   type.BitLength, -bc_difference);

                        Debug.Trace.MegaloProto.TraceInformation(msg);
                        errorWriter?.WriteLine(msg);
                    }
                } break;

                case MegaloScriptValueBaseType.Index:
                {
                    if (type.IndexTraits == MegaloScriptValueIndexTraits.PointerRaw)
                    {
                        int bit_length = type.BitLength;
                        if (bit_length != Bits.kByteBitCount && bit_length != Bits.kInt16BitCount && bit_length != Bits.kInt32BitCount)
                        {
                            string msg = string.Format("Index-type '{0}' is a 'raw' value but doesn't use a natural word size: {1}",
                                                       ValueTypeNames[type.NameIndex], bit_length);

                            Debug.Trace.MegaloProto.TraceInformation(msg);
                            errorWriter?.WriteLine(msg);
                        }
                    }
                } break;
                }
            }
            #endregion
            #region Actions
            foreach (var action in Actions)
            {
                var state = new MegaloScriptProtoParamsPostprocessState(errorWriter, action);
                state.Postprocess();
            }
            #endregion
            // #TODO_BLAM: would be nice to dump unused ActionTemplates...as I only copy-pasted H4's in Reach's DB
        }
        public static BXmlSerializerInterface GetNullInterface(Phx.BDatabaseBase db)
        {
            Contract.Requires(db != null);

            return(new NullInterface(db));
        }
Пример #18
0
        protected BListExplicitIndexXmlSerializerBase(BListExplicitIndexXmlParams <T> @params)
        {
            Contract.Requires <ArgumentNullException>(@params != null);

            mParams = @params;
        }
        public bool TryStreamData <TContext>(
            Engine.XmlFileInfo xfi, FA mode,
            Action <IO.XmlElementStream, TContext> streamProc, TContext ctxt,
            string ext = null)
        {
            Contract.Requires(xfi != null);
            Contract.Requires(streamProc != null);

            bool result = false;

            if (mode == FA.Read)
            {
                result = true;
                System.IO.FileInfo file;
                var xml_or_xmb = GameEngine.Directories.TryGetXmlOrXmbFile(xfi.Location, xfi.Directory, xfi.FileName, out file, ext);

                if (xml_or_xmb == Engine.GetXmlOrXmbFileResult.FileNotFound)
                {
                    GameEngine.UpdateFileLoadStatus(xfi, Engine.XmlFileLoadState.FileDoesNotExist);
                    throw new System.IO.FileNotFoundException("Neither XML or XMB exists: " + file.FullName);
                }

                try
                {
                    if (result)
                    {
                        using (var s = GameEngine.OpenXmlOrXmbForRead(xml_or_xmb, file.FullName))
                        {
                            SetupStream(s, mode, this);
                            streamProc(s, ctxt);

                            GameEngine.UpdateFileLoadStatus(xfi, Engine.XmlFileLoadState.Loaded);
                        }
                    }
                } catch (Exception ex)
                {
                    ex.UnusedExceptionVar();
                    GameEngine.UpdateFileLoadStatus(xfi, Engine.XmlFileLoadState.Failed);
                    throw;
                }
            }
            else if (mode == FA.Write)
            {
                System.IO.FileInfo file;
                result = GameEngine.Directories.TryGetFile(xfi.Location, xfi.Directory, xfi.FileName, out file, ext);

                if (Engine.XmlFileInfo.RespectWritableFlag)
                {
                    result = result && xfi.Writable;
                }

                if (result)
                {
                    using (var s = IO.XmlElementStream.CreateForWrite(xfi.RootName))
                    {
                        SetupStream(s, mode, this);
                        streamProc(s, ctxt);
                        s.Document.Save(file.FullName);
                    }
                }
            }

            return(result);
        }
Пример #20
0
        public static long BitDecodeNoneable(ulong bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);

            return((long)BitDecode(bits, traits.BitIndex, traits.Bitmask64) - 1);
        }
Пример #21
0
        internal static void SerializeValue <TDoc, TCursor>(MegaloScriptModel model, IO.TagElementStream <TDoc, TCursor, string> s,
                                                            MegaloScriptValueType valueType, ref int value,
                                                            IO.TagElementNodeType nodeType = IO.TagElementNodeType.Text, string nodeName = null)
            where TDoc : class
            where TCursor : class
        {
            Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.Index);

            var target = valueType.IndexTarget;

            if ((model.TagElementStreamSerializeFlags & MegaloScriptModelTagElementStreamFlags.EmbedObjects) != 0 &&
                target == MegaloScriptValueIndexTarget.Trigger)
            {
                SerializeTriggerReferenceValue(model, s, valueType, ref value);
            }
            #region UseIndexNames
            else if ((model.TagElementStreamSerializeFlags & MegaloScriptModelTagElementStreamFlags.UseIndexNames) != 0 &&
                     target.HasIndexName())
            {
                var id_resolving_ctxt = new MegaloScriptModel.IndexNameResolvingContext(model, target);
                var id_resolver       = MegaloScriptModel.IndexNameResolvingContext.IdResolver;
                var name_resolver     = MegaloScriptModel.IndexNameResolvingContext.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;
                }
            }
            #endregion
            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;
                }
            }

            // #REVIEW_BLAM: this will fail when embedding and the target is a Trigger since we don't preload triggers or such
            if (s.IsReading &&
                ((model.TagElementStreamSerializeFlags & MegaloScriptModelTagElementStreamFlags.EmbedObjects) == 0 || target != MegaloScriptValueIndexTarget.Trigger)
                )
            {
                if (!model.IndexTargetIsValid(target, valueType.IndexTraits, value))
                {
                    s.ThrowReadException(new System.IO.InvalidDataException(string.Format(
                                                                                "A {0} reference has an invalid value {1}", target, value)));
                }
            }
        }
Пример #22
0
        public static uint BitDecode(uint bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);

            return((bits >> traits.BitIndex) & traits.Bitmask32);
        }
Пример #23
0
        public MegaloScriptVirtualTriggerValue(MegaloScriptValueType valueType) : base(valueType)
        {
            Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.VirtualTrigger);

            mVirtualTriggerHandle = MegaloScriptModelObjectHandle.Null;
        }
Пример #24
0
        public static int BitDecodeNoneable(uint bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires/*<ArgumentException>*/ (!traits.IsEmpty);

            return((int)BitDecode(bits, traits.BitIndex, traits.Bitmask32) - 1);
        }
Пример #25
0
        public ulong BitEncode(TEnum value, ulong bits, Bitwise.BitFieldTraits traits)
        {
            Contract.Requires(!traits.IsEmpty);

            return(BitEncode(value, bits, traits.BitIndex));
        }
 public BTypeValuesInt32XmlSerializer(BTypeValuesXmlParams <int> @params, Collections.BTypeValuesInt32 list) : base(@params, list)
 {
     Contract.Requires <ArgumentNullException>(@params != null);
     Contract.Requires <ArgumentNullException>(list != null);
 }
Пример #27
0
 public MegaloScriptVarReferenceValue(MegaloScriptValueType valueType) : base(valueType)
 {
     Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.VarReference);
 }
Пример #28
0
 public MegaloScriptTeamFilterParametersValue(MegaloScriptValueType valueType) : base(valueType)
 {
     Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.TeamFilterParameters);
 }
Пример #29
0
        internal static void BitEncodeResourceModelIndex(ref Bitwise.HandleBitEncoder encoder, int resourceModelIndex)
        {
            Contract.Requires <ArgumentOutOfRangeException>(IsValidResourceModelIndex(resourceModelIndex));

            encoder.EncodeNoneable32(resourceModelIndex, kResourceModelBitMask);
        }
Пример #30
0
 public MegaloScriptSingleValue(MegaloScriptValueType valueType) : base(valueType)
 {
     Contract.Requires(valueType.BaseType == MegaloScriptValueBaseType.Single);
 }