User Tag List

Показано с 1 по 10 из 36

Тема: Создание кросскомпилятора языка Оберон для Z80

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #20

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    01	TYPE
    01.1	    TEMPLATE<CLASS XXX>
    02	    ListStdItem = POINTER TO RECORD
    03	        value: XXX;
    04	    END;
    
    Теперь у нас есть все возможные типы ListStdItem<LONGINT>, ListStdItem<DOUBLE>, ListStdItem<STRING>, ListStdItem<ListStdItem<STRING>> и т.п.
    
    05
    05.1	    TEMPLATE<CLASS XXX>
    06	    StdList = OBJECT
    07	        VAR
    08	            list: List;
    09	             
    10	        PROCEDURE &New(options: SET);
    11	        BEGIN
    12	            NEW(list, Compare, options)
    13	        END New;
    14	         
    15	        PROCEDURE Compare(first, second: ANY): LONGINT;
    16	        VAR
    17	            nFirst, nSecond: XXX;
    18	        BEGIN
    19	            nFirst := first(ListStdItem<XXX>).value;
    20	            nSecond := second(ListStdItem<XXX>).value;
    21	            IF nFirst < nSecond THEN
    22	                RETURN -1
    23	            ELSIF nFirst > nSecond THEN
    24	                RETURN 1
    25	            ELSE
    26	                RETURN 0
    27	            END
    28	        END Compare;
    29	                 
    30	        PROCEDURE Add(x: XXX);
    31	        VAR
    32	            item: ListStdItem<XXX>;
    33	        BEGIN
    34	            NEW(item);
    35	            item.value := x;
    36	            list.Add(item)
    37	        END Add;
    38	         
    39	        PROCEDURE Insert(pos: LONGINT; x: XXX);
    40	        VAR
    41	            item: ListStdItem<XXX>;
    42	        BEGIN
    43	            NEW(item);
    44	            item.value := x;
    45	            list.Insert(pos, item)
    46	        END Insert;
    47	         
    48	        PROCEDURE Remove(i: LONGINT);
    49	        BEGIN
    50	            list.Remove(i)
    51	        END Remove;
    52	         
    53	        PROCEDURE IndexOf(x: XXX): LONGINT;
    54	        VAR
    55	            item: ListStdItem<XXX>;
    56	        BEGIN
    57	            NEW(item);
    58	            item.value := x;
    59	            RETURN list.IndexOf(item)
    60	        END IndexOf;
    61	         
    62	        PROCEDURE GetCount(): LONGINT;
    63	        BEGIN
    64	            RETURN list.GetCount()
    65	        END GetCount;
    66	         
    67	        PROCEDURE GetItem(i: LONGINT): XXX;
    68	        VAR
    69	            item: ANY;
    70	        BEGIN
    71	            item := list.GetItem(i);
    72	            RETURN item(ListStdItem<XXX>).value
    73	        END GetItem;
    74	             
    75	    END LongintList;
    
    Теперь у нас есть все возможные типы StdList<LONGINT>, StdList<DOUBLE>, StdList<STRING>, StdList<StdList<STRING>> и т.п.
    Последний раз редактировалось vinxru; 15.03.2012 в 13:13.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Создание форума
    от CityAceE в разделе Форум
    Ответов: 43
    Последнее: 10.07.2016, 22:23
  2. Ответов: 172
    Последнее: 10.12.2012, 18:36

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •