@@ -5,138 +5,47 @@ namespace AlphaTab.Core.EcmaScript;
55internal class DataView
66{
77 public ArrayBuffer Buffer { get ; }
8+ public double ByteOffset { get ; }
9+ public double ByteLength { get ; }
10+
811
912 public DataView ( ArrayBuffer buffer )
1013 {
1114 Buffer = buffer ;
1215 }
1316
14- public double GetUint8 ( double offset )
17+ public DataView ( ArrayBuffer buffer , double byteOffset , double byteLength )
1518 {
16- return Buffer . Raw . Array ! [ Buffer . Raw . Offset + ( int ) offset ] ;
19+ Buffer = buffer ;
20+ ByteOffset = byteOffset ;
21+ ByteLength = byteLength ;
1722 }
1823
19- public void SetUint16 ( double offset , double value , bool littleEndian )
24+ public double GetInt16 ( double offset , bool littleEndian )
2025 {
21- var bytes = BitConverter . GetBytes ( ( ushort ) value ) ;
22- if ( littleEndian != BitConverter . IsLittleEndian )
26+ if ( littleEndian == BitConverter . IsLittleEndian )
2327 {
24- System . Array . Reverse ( bytes ) ;
28+ return BitConverter . ToInt16 ( Buffer . Raw , ( int ) ( ByteOffset + offset ) ) ;
2529 }
2630
27- System . Buffer . BlockCopy ( bytes , 0 , Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset ,
28- bytes . Length ) ;
29- }
30-
31- public double GetInt16 ( double offset , bool littleEndian )
32- {
3331 var bytes = new byte [ sizeof ( short ) ] ;
34- System . Buffer . BlockCopy ( Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset , bytes , 0 ,
32+ System . Buffer . BlockCopy ( Buffer . Raw , ( int ) ( ByteOffset + offset ) , bytes , 0 ,
3533 bytes . Length ) ;
36- if ( littleEndian != BitConverter . IsLittleEndian )
37- {
38- System . Array . Reverse ( bytes ) ;
39- }
40-
34+ System . Array . Reverse ( bytes ) ;
4135 return BitConverter . ToInt16 ( bytes , 0 ) ;
4236 }
4337
44- public void SetInt16 ( double offset , double value , bool littleEndian )
45- {
46- var bytes = BitConverter . GetBytes ( ( short ) value ) ;
47- if ( littleEndian != BitConverter . IsLittleEndian )
48- {
49- System . Array . Reverse ( bytes ) ;
50- }
51-
52- System . Buffer . BlockCopy ( bytes , 0 , Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset ,
53- bytes . Length ) ;
54- }
55-
56- public double GetUint32 ( double offset , bool littleEndian )
57- {
58- var bytes = new byte [ sizeof ( uint ) ] ;
59- System . Buffer . BlockCopy ( Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset , bytes , 0 ,
60- bytes . Length ) ;
61- if ( littleEndian != BitConverter . IsLittleEndian )
62- {
63- System . Array . Reverse ( bytes ) ;
64- }
65-
66- return BitConverter . ToUInt32 ( bytes , 0 ) ;
67- }
68-
69- public double GetInt32 ( double offset , bool littleEndian )
70- {
71- var bytes = new byte [ sizeof ( uint ) ] ;
72- System . Buffer . BlockCopy ( Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset , bytes , 0 ,
73- bytes . Length ) ;
74- if ( littleEndian != BitConverter . IsLittleEndian )
75- {
76- System . Array . Reverse ( bytes ) ;
77- }
78-
79- return BitConverter . ToInt32 ( bytes , 0 ) ;
80- }
81-
82- public void SetInt32 ( double offset , double value , bool littleEndian )
83- {
84- var bytes = BitConverter . GetBytes ( ( int ) value ) ;
85- if ( littleEndian != BitConverter . IsLittleEndian )
86- {
87- System . Array . Reverse ( bytes ) ;
88- }
89-
90- System . Buffer . BlockCopy ( bytes , 0 , Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset , bytes
91- . Length ) ;
92- }
93-
94- public double GetUint16 ( double offset , bool littleEndian )
38+ public double GetFloat32 ( double offset , bool littleEndian = true )
9539 {
96- var bytes = new byte [ sizeof ( ushort ) ] ;
97- System . Buffer . BlockCopy ( Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset , bytes , 0 ,
98- bytes . Length ) ;
99- if ( littleEndian != BitConverter . IsLittleEndian )
40+ if ( littleEndian == BitConverter . IsLittleEndian )
10041 {
101- System . Array . Reverse ( bytes ) ;
42+ return BitConverter . ToSingle ( Buffer . Raw , ( int ) ( ByteOffset + offset ) ) ;
10243 }
10344
104- return BitConverter . ToUInt16 ( bytes , 0 ) ;
105- }
106-
107- public double GetFloat32 ( double offset , bool littleEndian = true )
108- {
10945 var bytes = new byte [ sizeof ( float ) ] ;
110- System . Buffer . BlockCopy ( Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset , bytes , 0 ,
46+ System . Buffer . BlockCopy ( Buffer . Raw , ( int ) ( ByteOffset + offset ) , bytes , 0 ,
11147 bytes . Length ) ;
112- if ( littleEndian != BitConverter . IsLittleEndian )
113- {
114- System . Array . Reverse ( bytes ) ;
115- }
116-
48+ System . Array . Reverse ( bytes ) ;
11749 return BitConverter . ToSingle ( bytes , 0 ) ;
11850 }
119-
120- public void SetUint8 ( double offset , double value )
121- {
122- Buffer . Raw . Array ! [ Buffer . Raw . Offset + ( int ) offset ] = ( byte ) value ;
123- }
124-
125- public double GetInt8 ( double offset )
126- {
127- return ( sbyte ) Buffer . Raw . Array ! [ Buffer . Raw . Offset + ( int ) offset ] ;
128- }
129-
130- public double SetUint32 ( double offset , double value , bool littleEndian )
131- {
132- var bytes = BitConverter . GetBytes ( ( uint ) value ) ;
133- if ( littleEndian != BitConverter . IsLittleEndian )
134- {
135- System . Array . Reverse ( bytes ) ;
136- }
137-
138- System . Buffer . BlockCopy ( bytes , 0 , Buffer . Raw . Array ! , Buffer . Raw . Offset + ( int ) offset , bytes
139- . Length ) ;
140- return value ;
141- }
14251}
0 commit comments