По мотивам темы
Предложение по расширению каркаса BlackBox создал несколько модулей:
- StdlibObjects - модуль базового объекта, унаследованного от Stores.Store.
- StdlibLists - модуль поддержки динамических массивов с произвольным базовым типом.
- StdlibMem - набор процедур для низкоуровневой работы с памятью.
Их, конечно, планируется расширять, так как они сейчас являются пробной версией.
Привожу пример программы с использованием динамического массива.
Код:
MODULE TestLists;
IMPORT Kernel, O := StdlibObjects, StdlibLists, Log := StdLog;
TYPE
MyList = POINTER TO RECORD (StdlibLists.List) END;
MyObject = POINTER TO RECORD (O.Object)
data: INTEGER;
END;
PROCEDURE (L: MyList) CompareItems (Index1, Index2: INTEGER): INTEGER;
VAR object1, object2: MyObject; obj1, obj2: O.Object;
BEGIN
obj1 := L.Get(Index1); object1 := obj1(MyObject);
obj2 := L.Get(Index2); object2 := obj2(MyObject);
IF object1.data > object2.data THEN
RETURN 1
ELSIF object1.data < object2.data THEN
RETURN -1
ELSE
RETURN 0
END
END CompareItems;
PROCEDURE NewList (): MyList;
VAR list: MyList;
BEGIN
NEW(list); list.Init;
RETURN list
END NewList;
PROCEDURE NewObject (): MyObject;
VAR object: MyObject;
BEGIN
NEW(object);
RETURN object
END NewObject;
PROCEDURE AddItems (VAR L: MyList);
VAR
myObj: MyObject;
counter: INTEGER;
i, j: INTEGER;
BEGIN
counter := 0;
FOR j := 1 TO 10 DO
INC(counter);
myObj := NewObject();
myObj.data := counter*counter;
IF ODD(counter) THEN myObj.data := -myObj.data END;
i := L.Add(myObj);
END;
END AddItems;
PROCEDURE Print (L: MyList);
VAR j: INTEGER; o: O.Object; myObj: MyObject;
BEGIN
Log.Ln;
FOR j := 0 TO L.Count - 1 DO
o := L.Get(j); myObj := o(MyObject); (* get object and assign its pointer to descedant object *)
Log.Int(myObj.data); Log.Ln
END;
END Print;
PROCEDURE Do*;
VAR
mylist: MyList;
BEGIN
mylist := NewList();
mylist.SetCapacity(12);
(* Add 10 objects *)
AddItems (mylist);
(* Printing data of stored objects *)
Print (mylist);
(* Sort objects *)
mylist.Sort;
(* Printing data of stored objects *)
Print (mylist);
END Do;
END TestLists.
^Q TestLists.Do
Желающие опробовать, могут скачать Stdlib.
Вложение:
Stdlib.zip [16.69 КБ]
Скачиваний: 321
Приветствуются комментарии и конструктивные замечания.