• R/O
  • SSH

Ada95FL: 提交

Ada 95 foundation library


Commit MetaInfo

修订版19274b084e74d52b152537afefe7b8e4c06aa982 (tree)
时间2019-10-06 19:03:50
作者Sergey Dukov <dukov54@live...>
CommiterSergey Dukov

Log Message

#32763 Полная реализация "*"

更改概述

差异

diff -r 462f0faf7729 -r 19274b084e74 Unbounded/unbounded_array.adb
--- a/Unbounded/unbounded_array.adb Sun Oct 06 05:25:11 2019 +0400
+++ b/Unbounded/unbounded_array.adb Sun Oct 06 14:03:50 2019 +0400
@@ -3323,5 +3323,53 @@
33233323 end if;
33243324 end Delete;
33253325
3326+ function "*"
3327+ (Left : Natural;
3328+ Right : String_32) return Unbounded_Array_Type
3329+ is
3330+ RL : Natural := Right'Length;
3331+ DL : Natural := Left * RL;
3332+ SR : Positive := Right'First;
3333+ ER : Positive := Right'Last;
3334+ DR : Referenced_Buffer_Access;
3335+ K : Positive := 1;
3336+ BOMV : Boolean := False;
3337+ begin
3338+ if DL = 0 then
3339+ DR := Empty_Referenced_Buffer'Access;
3340+ return (AF.Controlled with Reference => DR);
3341+ end if;
3342+ if Right(SR) = BOM32 then
3343+ RL := RL - 1;
3344+ if RL = 0 then
3345+ DR := Empty_Referenced_Buffer'Access;
3346+ return (AF.Controlled with Reference => DR);
3347+ end if;
3348+ SR := SR + 1;
3349+ DL := Left * RL + 1;
3350+ BOMV := True;
3351+ K := 2;
3352+ end if;
3353+ DR := Allocate (4*DL);
3354+ declare
3355+ subtype DSM is String_32(1 .. DL);
3356+ package DTP is new ATOAC(DSM);
3357+ Result_Ptr : DTP.Object_Pointer :=
3358+ DTP.To_Pointer(DR.Data(1)'Address);
3359+ DA : DSM renames Result_Ptr.all;
3360+ begin
3361+ if BOMV then
3362+ DA(1) := BOM32;
3363+ end if;
3364+ for J in 1 .. Left loop
3365+ DA(K .. K + RL - 1) := Right(SR .. ER);
3366+ K := K + RL;
3367+ end loop;
3368+ DR.Last := 4*DL;
3369+ DR.UTF32 := True;
3370+ end;
3371+ return (AF.Controlled with Reference => DR);
3372+ end "*";
3373+
33263374
33273375 end Unbounded_Array;
diff -r 462f0faf7729 -r 19274b084e74 Unbounded/unbounded_array.ads
--- a/Unbounded/unbounded_array.ads Sun Oct 06 05:25:11 2019 +0400
+++ b/Unbounded/unbounded_array.ads Sun Oct 06 14:03:50 2019 +0400
@@ -361,6 +361,10 @@
361361
362362 function "*"
363363 (Left : Natural;
364+ Right : String_32) return Unbounded_Array_Type;
365+
366+ function "*"
367+ (Left : Natural;
364368 Right : Unbounded_Array_Type) return Unbounded_Array_Type;
365369
366370
diff -r 462f0faf7729 -r 19274b084e74 tester/unbounded_tester.adb
--- a/tester/unbounded_tester.adb Sun Oct 06 05:25:11 2019 +0400
+++ b/tester/unbounded_tester.adb Sun Oct 06 14:03:50 2019 +0400
@@ -42,11 +42,12 @@
4242 declare
4343 Unicode_String : String_32 := To_String_32(Unicode_Array);
4444 begin
45- Append(Unicode_Array, Unicode_Array);
46- Append(Unicode_Array, Unicode_String);
45+-- Append(Unicode_Array, Unicode_Array);
46+-- Append(Unicode_Array, Unicode_String);
4747 -- Unicode_Array := Delete(Unicode_Array,
4848 -- 2,
4949 -- 9);
50+ Unicode_Array := 3 * Unicode_String;
5051 Delete(Unicode_Array,
5152 2,
5253 9);
Show on old repository browser