Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Прочие языки программирования > Assembler
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.04.2013, 08:13
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Спасибо за замечания.
Да я просто чтоб не заморачиваться - в дельфи написал, потом выдергал код (ХЕ3, обратите внимание на цикл while, как она его забавно скомпилировала).
Вот эту вот херь:
Код:
//type
//  // двусвязный список
//  PMemPtrItem = ^TMemPtrItem;
//  TMemPtrItem = packed record
//    Left,
//    Right: PMemPtrItem;
//    Data: Pointer;
//  end;
//
//  //
//  function InsertItem(const AParent: PMemPtrItem;
//    const AData: Pointer): PMemPtrItem; cdecl;
//  begin
//    Result := PMemPtrItem(LocalAlloc($40, SizeOf(TMemPtrItem)));
//    Result^.Left := nil;
//    Result^.Right := nil;
//    Result^.Data := AData;
//
//    if AParent <> nil then
//    begin
//      Result^.Left := AParent;
//
//      if AParent^.Right <> nil then
//      begin // вставка
//        Result^.Right := AParent^.Right;
//        AParent^.Right^.Left := Result;
//      end else
//      begin // добавление
//        Result^.Right := nil;
//      end;
//
//      AParent^.Right := Result;
//    end;
//  end;
//
//  // чистка слева направо
//  procedure ClearItems(const AFirst: PMemPtrItem); cdecl;
//  var
//    i, j: PMemPtrItem;
//  begin
//    if AFirst = nil then
//      Exit;
//
//    i := AFirst;
//    while i <> nil do
//    begin
//      VirtualFree(i^.Data, 0, MEM_RELEASE);
//
//      j := i^.Right;
//      LocalFree(integer(i));
//      i := j;
//    end;
//  end;
//
//  // считаем, что данные там уникальные
//  // тоже слева направо ищем
//  // ф-я возвращает первую запись из всего списка
//  function RemoveByData(const AFirst: PMemPtrItem;
//    const AData: Pointer): PMemPtrItem; cdecl;
//  var
//    i: PMemPtrItem;
//  begin
//    if AFirst = nil then
//      Exit(nil);
//
//    i := AFirst;
//    Result := AFirst;
//
//    while i <> nil do
//    begin
//      if i^.Data = AData then
//      begin
//        if i = AFirst then
//        begin
//          Result := i^.Right;
//          Result^.Left := nil;
//        end else
//        begin
//          if i^.Left <> nil then
//            i^.Left^.Right := i^.Right;
//
//          if i^.Right <> nil then
//            i^.Right^.Left := i^.Left;
//        end;
//        // удаляем
//        VirtualFree(i^.Data, 0, MEM_RELEASE);
//        LocalFree(integer(i));
//
//        Exit;
//      end;
//
//      i := i^.Right;
//    end;
//  end;
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 18.04.2013 в 08:16.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter