@@ -30,7 +30,7 @@ export class XdrDecoder<R extends IReader & IReaderResettable = IReader & IReade
3030 public readAny ( ) : unknown {
3131 // Basic implementation - in practice this would need schema info
3232 // For now, we'll throw as this should be used with schema decoder
33- throw new Error ( 'XdrDecoder.readAny() requires explicit type methods or use XdrSchemaDecoder ' ) ;
33+ throw new Error ( 'not implemented ' ) ;
3434 }
3535
3636 /**
@@ -122,17 +122,11 @@ export class XdrDecoder<R extends IReader & IReaderResettable = IReader & IReade
122122 */
123123 public readOpaque ( size : number ) : Uint8Array {
124124 const reader = this . reader ;
125- const data = new Uint8Array ( size ) ;
126-
127- // Read actual data
128- for ( let i = 0 ; i < size ; i ++ ) {
129- data [ i ] = reader . u8 ( ) ;
130- }
125+ const data = reader . buf ( size ) ;
131126
132127 // Skip padding bytes to reach 4-byte boundary
133- const paddedSize = Math . ceil ( size / 4 ) * 4 ;
134- const padding = paddedSize - size ;
135- reader . skip ( padding ) ;
128+ const paddedSize = size % 4 === 0 ? size : size + ( 4 - ( size % 4 ) ) ;
129+ reader . skip ( paddedSize - size ) ;
136130
137131 return data ;
138132 }
@@ -153,20 +147,13 @@ export class XdrDecoder<R extends IReader & IReaderResettable = IReader & IReade
153147 public readString ( ) : string {
154148 const size = this . readUnsignedInt ( ) ;
155149 const reader = this . reader ;
156-
157- // Read UTF-8 bytes
158- const utf8Bytes = new Uint8Array ( size ) ;
159- for ( let i = 0 ; i < size ; i ++ ) {
160- utf8Bytes [ i ] = reader . u8 ( ) ;
161- }
150+ const text = reader . utf8 ( size ) ;
162151
163152 // Skip padding bytes to reach 4-byte boundary
164- const paddedSize = Math . ceil ( size / 4 ) * 4 ;
165- const padding = paddedSize - size ;
166- reader . skip ( padding ) ;
153+ const paddedSize = size % 4 === 0 ? size : size + ( 4 - ( size % 4 ) ) ;
154+ reader . skip ( paddedSize - size ) ;
167155
168- // Decode UTF-8 to string
169- return new TextDecoder ( 'utf-8' ) . decode ( utf8Bytes ) ;
156+ return text ;
170157 }
171158
172159 /**
@@ -182,9 +169,7 @@ export class XdrDecoder<R extends IReader & IReaderResettable = IReader & IReade
182169 */
183170 public readArray < T > ( size : number , elementReader : ( ) => T ) : T [ ] {
184171 const array : T [ ] = [ ] ;
185- for ( let i = 0 ; i < size ; i ++ ) {
186- array . push ( elementReader ( ) ) ;
187- }
172+ for ( let i = 0 ; i < size ; i ++ ) array . push ( elementReader ( ) ) ;
188173 return array ;
189174 }
190175
0 commit comments