示例#1
0
        public void EventMap_WhenCreated_OffsetIsMovedOn()
        {
            byte[]        contents     = new byte[20];
            Offset        offset       = 0;
            IIndexDetails indexDetails = IndexHelper.CreateIndexDetails(2);

            EventMapMetadataTableRow row = new EventMapMetadataTableRow(contents, offset, indexDetails);

            Assert.AreEqual(4, offset.Current);
        }
示例#2
0
            private void LoadEvents()
            {
                // Check if we have a property map and then find the property map for the current type
                // if it exists.
                if (!_metadataStream.Tables.ContainsKey(MetadataTables.EventMap))
                {
                    return;
                }

                int startEventList = -1;
                int endEventList   = -1;

                EventMapMetadataTableRow searchFor = new EventMapMetadataTableRow();

                searchFor.Parent = _indexInMetadataTable;

                int mapIndex = Array.BinarySearch(_metadataStream.Tables[MetadataTables.EventMap],
                                                  searchFor,
                                                  new EventMapComparer()
                                                  );

                if (mapIndex >= 0)
                {
                    startEventList = ((EventMapMetadataTableRow)_metadataStream.Tables[MetadataTables.EventMap][mapIndex]).EventList;
                    if (mapIndex < _metadataStream.Tables[MetadataTables.EventMap].Length - 1)
                    {
                        endEventList = ((EventMapMetadataTableRow)_metadataStream.Tables[MetadataTables.EventMap][mapIndex + 1]).EventList - 1;
                    }
                    else
                    {
                        endEventList = _metadataStream.Tables[MetadataTables.Event].Length;
                    }
                }

                // If we have properties we need to load them, instantiate a PropertyDef and relate
                // it to its getter and setter.
                if (startEventList != -1)
                {
                    MetadataRow[] table = _metadataStream.Tables[MetadataTables.Event];
                    // Now load all the methods between our index and the endOfMethodIndex
                    for (int i = startEventList; i <= endEventList; i++)
                    {
                        EventMetadataTableRow eventRow = table[i - 1] as EventMetadataTableRow;

                        EventDef eventDef = new EventDef(
                            _references.Assembly.StringStream.GetString(eventRow.Name.Value),
                            _references.Assembly,
                            _builtType
                            );

                        _map.Add(MetadataTables.Event, eventRow, eventDef);
                        _builtType.Events.Add(eventDef);
                    }
                }
            }
示例#3
0
 public int Compare(EventMapMetadataTableRow x, EventMapMetadataTableRow y)
 {
     if (x.Parent < y.Parent)
     {
         return(-1);
     }
     if (x.Parent == y.Parent)
     {
         return(0);
     }
     return(1);
 }
示例#4
0
        public void EventMap_WhenCreated_FieldsAreReadCorrectly()
        {
            byte[] contents = new byte[] {
                0x01, 0x00,
                0x05, 0x00
            };
            IIndexDetails indexDetails = IndexHelper.CreateIndexDetails(2);

            EventMapMetadataTableRow row = new EventMapMetadataTableRow(contents, 0, indexDetails);

            Assert.AreEqual(1, row.Parent.Value);
            Assert.AreEqual(5, row.EventList.Value);
        }
示例#5
0
 public EventMapEntry(MetadataDirectory directory, EventMapMetadataTableRow row)
 {
     this.FileOffset = string.Format("0x{0:x}", row.FileOffset);
     this.Parent     = row.Parent.Value.ToString();
     this.EventList  = row.EventList.Value.ToString();
 }