1 //
2 // Copyright (c) 2010-2023 Antmicro
3 //
4 //  This file is licensed under the MIT License.
5 //  Full license text is available in 'licenses/MIT.txt'.
6 //
7 using System;
8 using System.Linq;
9 
10 namespace Antmicro.Renode.Utilities.Packets
11 {
12     [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
13     public sealed class OffsetAttribute : Attribute
14     {
OffsetAttribute(uint quadWords = 0, uint doubleWords = 0, uint words = 0, uint bytes = 0, uint bits = 0)15         public OffsetAttribute(uint quadWords = 0, uint doubleWords = 0, uint words = 0, uint bytes = 0, uint bits = 0)
16         {
17             OffsetInBytes = new[]
18             {
19                 (quadWords << 3),
20                 (doubleWords << 2),
21                 (words << 1),
22                 bytes,
23                 (bits >> 3)
24             }.Aggregate((a, b) => a + b);
25             OffsetInBits = bits & 0x7;
26         }
27 
28         public uint OffsetInBytes { get; }
29         public uint OffsetInBits { get; }
30     }
31 }