listsupport.pas
上传用户:yjb1804
上传日期:2021-01-30
资源大小:3105k
文件大小:3k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit ListSupport;
  2. (*
  3.  * The contents of this file are subject to the Mozilla Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/MPL/
  7.  *
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  *
  13.  * This code was inspired to expidite the creation of unit tests 
  14.  * for use the Dunit test frame work.
  15.  * 
  16.  * The Initial Developer of XPGen is Michael A. Johnson.
  17.  * Portions created The Initial Developer is Copyright (C) 2000.
  18.  * Portions created by The DUnit Group are Copyright (C) 2000.
  19.  * All rights reserved.
  20.  *
  21.  * Contributor(s):
  22.  * Michael A. Johnson <majohnson@golden.net>
  23.  * Juanco A馿z <juanco@users.sourceforge.net>
  24.  * Chris Morris <chrismo@users.sourceforge.net>
  25.  * Jeff Moore <JeffMoore@users.sourceforge.net>
  26.  * The DUnit group at SourceForge <http://dunit.sourceforge.net>
  27.  *
  28.  *)
  29. {
  30.  provides common list support functions that are commonly used throughout the system.
  31.  ListFreeObjectItems - clears and releases tobject descended items in a list
  32.  ListFreePointerItems - clears and releases items allocated via new/dispose
  33.  
  34.  Programmer: Michael A. Johnson
  35.  Date: 9-Mar-2000
  36. }
  37. interface
  38. uses
  39.   classes;
  40. procedure ListFreeObjectItems(List: TList);
  41. procedure ListFreePointerItems(List: TList);
  42. implementation
  43. procedure ListFreeObjectItems(List: TList);
  44. {
  45.  ListFreeObjectItems - clears and releases tobject items in a list.
  46.  Assumptions:  Assumes list is composed of items are are derived from tobject and that
  47.  the destructor is overriden from the base through all descendants.
  48.  
  49.  Programmer: Michael A. Johnson
  50.  Date: 9-Mar-2000
  51. }
  52. var
  53.   Item: Tobject;
  54.   Iter: integer;
  55. begin
  56.   { make sure we have a real list }
  57.   if List <> nil then
  58.     begin
  59.       try
  60.         { visit each node in the list and release memory occupied by the items }
  61.         for Iter := 0 to List.count - 1 do
  62.           begin
  63.             Item := List[Iter];
  64.             Item.free;
  65.           end;
  66.       finally
  67.         { make sure we empty the list so that references to stale pointers are avoided }
  68.         List.Clear;
  69.       end;
  70.     end;
  71. end;
  72. procedure ListFreePointerItems(List: TList);
  73. {
  74.  ListFreePointerItems - clears and releases items allocated via new/dispose
  75.  
  76.  Assumptions:  Assumes that all items in list were allocated via operator new
  77.  and can be released by calling dispose on a generic pointer.  You should be
  78.  aware that items allocated by GetMem/AllocMem etc may not be able to be released
  79.  via this means. If you used GetMen/AllocMem to create the items you should call
  80.  the corresponding release procedure for those memory allocators.
  81.  
  82.  Programmer: Michael A. Johnson
  83.  Date: 9-Mar-2000
  84. }
  85. var
  86.   Item: pointer;
  87.   Iter: integer;
  88. begin
  89.   { make sure we have a real list }
  90.   if List <> nil then
  91.     begin
  92.       try
  93.         { visit each node in the list and release memory occupied by the items }
  94.         for Iter := 0 to List.count - 1 do
  95.           begin
  96.             Item := List[Iter];
  97.             Dispose(Item);
  98.           end;
  99.       finally
  100.         { make sure we empty the list so that references to stale pointers are avoided }
  101.         List.Clear;
  102.       end;
  103.     end;
  104. end;
  105. end.
  106.