File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -432,6 +432,37 @@ begin
432432 MCDataExecRandomBytes(Count, output)
433433end syntax
434434
435+ --
436+
437+ public foreign handler MCDataExecReverseBytesOf(inout Target as Data) \
438+ returns nothing binds to "<builtin>"
439+
440+ /**
441+ Summary: Reverse binary data
442+ Target: A binary data string
443+
444+ Example:
445+ variable tForward
446+ put 5 random bytes into tForward
447+
448+ variable tReversed
449+ put tForward into tReversed
450+ reverse tReversed
451+
452+ expect that the first byte of tForward is the last byte of tReversed
453+ expect that the last byte of tForward is the first byte of tReversed
454+
455+ Description:
456+ Reverses the order of bytes in the <Target>.
457+
458+ Tags: Binary
459+ */
460+ syntax ReverseBytesOf is statement
461+ "reverse" <Target: Expression>
462+ begin
463+ MCDataExecReverseBytesOf(Target)
464+ end syntax
465+
435466----------------------------------------------------------------
436467-- Conversion between bytes and numbers
437468----------------------------------------------------------------
Original file line number Diff line number Diff line change @@ -223,6 +223,21 @@ MCDataExecRandomBytes (uindex_t p_count, MCDataRef & r_data)
223223
224224// //////////////////////////////////////////////////////////////////////////////
225225
226+ extern " C" MC_DLLEXPORT_DEF void
227+ MCDataExecReverseBytesOf (MCDataRef &x_data)
228+ {
229+ MCAutoDataRef t_data;
230+ if (!MCDataMutableCopy (x_data, &t_data))
231+ return ;
232+ if (!MCDataReverse (*t_data))
233+ return ;
234+ if (!t_data.MakeImmutable ())
235+ return ;
236+ MCValueAssign (x_data, *t_data);
237+ }
238+
239+ // //////////////////////////////////////////////////////////////////////////////
240+
226241extern " C" MC_DLLEXPORT_DEF void
227242MCByteEvalByteWithCode (uinteger_t p_value,
228243 MCDataRef & r_data)
Original file line number Diff line number Diff line change @@ -272,6 +272,40 @@ return
272272
273273end handler
274274
275+ ----------------------------------------------------------------
276+ -- Other manipulations
277+ ----------------------------------------------------------------
278+
279+ public handler TestReverse()
280+ variable kFOdd
281+ put EncodeUTF8("abc") into kFOdd
282+ variable kROdd
283+ put EncodeUTF8("cba") into kROdd
284+ variable kFEven
285+ put EncodeUTF8("0123") into kFEven
286+ variable kREven
287+ put EncodeUTF8("3210") into kREven
288+
289+ variable tReversed
290+
291+ put kFOdd into tReversed
292+ reverse tReversed
293+ test "reverse in-place (odd)" when tReversed is kROdd
294+ reverse tReversed
295+ test "rereverse in-place (odd)" when tReversed is kFOdd
296+
297+ put kFEven into tReversed
298+ reverse tReversed
299+ test "reverse in-place (even)" when tReversed is kREven
300+ reverse tReversed
301+ test "rereverse in-place (even)" when tReversed is kFEven
302+
303+ put the empty data into tReversed
304+ reverse tReversed
305+ test "reverse in-place (empty)" when tReversed is empty
306+
307+ end handler
308+
275309----------------------------------------------------------------
276310-- Helper functions
277311----------------------------------------------------------------
You can’t perform that action at this time.
0 commit comments