public bool FindPatterns()
        {
            PatternFileOffsets.Clear();

            int offset = 0;

            while (PhxUtil.FindBytePattern(PatternFileOffsets, SourceExeBytes, ref offset, BytePattern))
            {
            }

            return(PatternFileOffsets.Count == 1);
        }
Exemple #2
0
            public uint GetSuperFastHashCode()
            {
                var hash = TypeDesc.GetSuperFastHashCode();

                var buffer = PhxUtil.GetBufferForSuperFastHash(sizeof(uint));

                Bitwise.ByteSwap.ReplaceBytes(buffer, 0, (uint)ArrayLength);
                hash = PhxUtil.SuperFastHash(buffer, 0, sizeof(uint), hash);

                // #TODO hash the value's bytes

                return(hash);
            }
        public override object GetObject(int id)
        {
            if (id.IsNone())
            {
                return(null);
            }

            if (PhxUtil.IsUndefinedReferenceHandle(id))
            {
                return(Phoenix.TypeExtensionsPhx.GetUndefinedObject(mUndefinedInterface, id));
            }

            return(base.GetObject(id));
        }
        public bool StreamTactic <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s
                                                 , string xmlName
                                                 , ref int dbid
                                                 , IO.TagElementNodeType xmlSource = XmlUtil.kSourceElement)
            where TDoc : class
            where TCursor : class
        {
            const Phx.DatabaseObjectKind kDbKind = Phx.DatabaseObjectKind.Tactic;

            Contract.Requires(xmlSource.RequiresName() == (xmlName != XML.XmlUtil.kNoXmlName));

            string id_name      = null;
            bool   was_streamed = true;
            bool   to_lower     = false;

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

                if (was_streamed)
                {
                    id_name = System.IO.Path.GetFileNameWithoutExtension(id_name);

                    dbid = Database.GetId(kDbKind, id_name);
                    Contract.Assert(dbid.IsNotNone(), id_name);

                    if (PhxUtil.IsUndefinedReferenceHandle(dbid))
                    {
                        TraceUndefinedHandle(s, id_name, xmlName, dbid, kDbKind.ToString());
                    }
                }
            }
            else if (s.IsWriting)
            {
                if (dbid.IsNone())
                {
                    was_streamed = false;
                    return(was_streamed);
                }

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

                id_name += Phx.BTacticData.kFileExt;
                s.StreamStringOpt(xmlName, ref id_name, to_lower, xmlSource, intern: true);
            }

            return(was_streamed);
        }
        public int GetMemberIdOrUndefined(string memberName)
        {
            int id = TryGetMemberIdOrUndefined(memberName);

            if (id.IsNone())
            {
                InitializeUndefined();

                id = mUndefined.Count;
                mUndefined.Add(memberName);
                id = PhxUtil.GetUndefinedReferenceHandle(id);
            }

            return(id);
        }
        public int TryGetMemberIdOrUndefined(string memberName)
        {
            int id = TryGetMemberId(memberName);

            if (id.IsNone() && MemberUndefinedCount != 0)
            {
                id = mUndefined.FindIndex(str => PhxUtil.StrEqualsIgnoreCase(str, memberName));
                if (id.IsNotNone())
                {
                    id = PhxUtil.GetUndefinedReferenceHandle(id);
                }
            }

            return(id);
        }
        public string GetMemberNameOrUndefined(int memberId)
        {
            string name;

            if (PhxUtil.IsUndefinedReferenceHandle(memberId))
            {
                Contract.Assert(mUndefined != null);
                name = mUndefined[PhxUtil.GetUndefinedReferenceDataIndex(memberId)];
            }
            else
            {
                name = GetMemberName(memberId);
            }

            return(name);
        }
        void StreamTacticsAsync(ref bool r, FA mode)
        {
            var tactics         = Database.Tactics;
            var tasks           = new List <Task <bool> >(tactics.Count);
            var task_exceptions = new List <Exception>(tactics.Count);

            foreach (var tactic in tactics)
            {
                if (mode == FA.Read)
                {
                    if (tactic.SourceXmlFile != null)
                    {
                        continue;
                    }

                    tactic.SourceXmlFile = Phx.BTacticData.CreateFileInfo(mode, tactic.Name);
                }
                else if (mode == FA.Write)
                {
                    Contract.Assert(tactic.SourceXmlFile != null, tactic.Name);
                }

                var engine = this.GameEngine;
                if (mode == FA.Read)
                {
                    engine.UpdateFileLoadStatus(tactic.SourceXmlFile, Engine.XmlFileLoadState.Loading);
                }

                var arg  = tactic;
                var task = Task <bool> .Factory.StartNew((state) =>
                {
                    var _tactic = state as Phx.BTacticData;
                    return(TryStreamData(_tactic.SourceXmlFile, mode, StreamTactic, _tactic, Phx.BTacticData.kFileExt));
                }, arg);

                tasks.Add(task);
            }
            PhxUtil.UpdateResultWithTaskResults(ref r, tasks, task_exceptions);

            if (!r)
            {
                Debug.Trace.XML.TraceData(System.Diagnostics.TraceEventType.Error, TypeExtensions.kNone,
                                          "Failed to " + mode + " tactics",
                                          task_exceptions.ToAggregateExceptionOrNull().GetOnlyExceptionOrAllWhenAggregate());
            }
        }
Exemple #9
0
		public uint GetSuperFastHashCode()
		{
			var buffer = PhxUtil.GetBufferForSuperFastHash(sizeof(uint));

			uint hash;

			Bitwise.ByteSwap.ReplaceBytes(buffer, 0, (uint)Type);
			hash = PhxUtil.SuperFastHash(buffer, 0, sizeof(uint));

			Bitwise.ByteSwap.ReplaceBytes(buffer, 0, (ushort)Size);
			hash = PhxUtil.SuperFastHash(buffer, 0, sizeof(ushort), hash);

			Bitwise.ByteSwap.ReplaceBytes(buffer, 0, (ushort)Alignment);
			hash = PhxUtil.SuperFastHash(buffer, 0, sizeof(ushort), hash);

			buffer[0] = Flags;
			hash = PhxUtil.SuperFastHash(buffer, 0, sizeof(byte), hash);

			return hash;
		}
Exemple #10
0
        public int CompareTo(BLeaderSupportPower other)
        {
            if (IconLocation != other.IconLocation)
            {
                IconLocation.CompareTo(other.IconLocation);
            }

            if (TechPrereqID != other.TechPrereqID)
            {
                TechPrereqID.CompareTo(other.TechPrereqID);
            }

            if (SupportPowerIDs.Count != other.SupportPowerIDs.Count)
            {
                SupportPowerIDs.Count.CompareTo(other.SupportPowerIDs.Count);
            }

            int a_hash = PhxUtil.CalculateHashCodeForDBIDs(SupportPowerIDs);
            int b_hash = PhxUtil.CalculateHashCodeForDBIDs(other.SupportPowerIDs);

            return(a_hash.CompareTo(b_hash));
        }
        protected static void TraceUndefinedHandle <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s, string name,
                                                                   string xmlName,
                                                                   int id, string kind)
            where TDoc : class
            where TCursor : class
        {
            Contract.Assert(s.IsReading);

            var line_info   = Text.TextLineInfo.Empty;
            var cursor_name = "<unknown element>";
            var text_stream = s as IO.TagElementTextStream <TDoc, TCursor>;

            if (text_stream != null)
            {
                cursor_name = text_stream.CursorName;
                line_info   = text_stream.TryGetLastReadLineInfo();
            }

            Debug.Trace.XML.TraceEvent(System.Diagnostics.TraceEventType.Warning, TypeExtensions.kNone,
                                       "{0} ({1}): Generated UndefinedHandle for '{2}.{3}' ({4}). {5}={6}",
                                       s.StreamName, Text.TextLineInfo.ToString(line_info, verboseString: true),
                                       cursor_name, xmlName ?? "InnerText",
                                       kind, name, PhxUtil.GetUndefinedReferenceDataIndex(id).ToString());
        }
        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);
        }
 public virtual int TryGetMemberId(string memberName)
 {
     return(mList.FindIndex(n => PhxUtil.StrEqualsIgnoreCase(n, memberName)));
 }
 public bool StreamCreatorToolCommandLine(IO.EndianStream s, ref string value)
 {
     return(PhxUtil.StreamPointerizedCString(s, ref CreatorToolCommandLine, ref value));
 }
 public bool StreamSourceFileNamee(IO.EndianStream s, ref string value)
 {
     return(PhxUtil.StreamPointerizedCString(s, ref SourceFileName, ref value));
 }
 public bool StreamTagUserName(IO.EndianStream s, ref string value)
 {
     return(PhxUtil.StreamPointerizedCString(s, ref TagUserNameOffset, ref value));
 }
Exemple #17
0
 public int TryGetMemberId(string memberName)
 {
     return(Array.FindIndex(kNames, n => PhxUtil.StrEqualsIgnoreCase(n, memberName)));
 }
            public bool UpdateResultWithTaskResults(ref bool r)
            {
                PhxUtil.UpdateResultWithTaskResults(ref r, Tasks, TaskExceptions);

                return(r);
            }