Changeset 78 for Generics


Ignore:
Timestamp:
Oct 30, 2010, 6:39:12 PM (14 years ago)
Author:
george
Message:
  • Added: Ability of TListObject to own items and be able to free them on deletion and list destruction.
Location:
Generics/TemplateGenerics
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • Generics/TemplateGenerics/Demo

    • Property svn:ignore
      •  

        old new  
        11lib
        22Demo.exe
         3heaptrclog.trc
         4Demo
  • Generics/TemplateGenerics/Demo/Demo.lpi

    r77 r78  
    3838      </Item2>
    3939    </RequiredPackages>
    40     <Units Count="66">
     40    <Units Count="69">
    4141      <Unit0>
    4242        <Filename Value="Demo.lpr"/>
    4343        <IsPartOfProject Value="True"/>
    4444        <UnitName Value="Demo"/>
    45         <EditorIndex Value="8"/>
    46         <WindowIndex Value="0"/>
    47         <TopLine Value="1"/>
    48         <CursorPos X="34" Y="7"/>
    49         <UsageCount Value="50"/>
     45        <EditorIndex Value="11"/>
     46        <WindowIndex Value="0"/>
     47        <TopLine Value="1"/>
     48        <CursorPos X="26" Y="8"/>
     49        <UsageCount Value="53"/>
    5050        <Loaded Value="True"/>
    5151        <DefaultSyntaxHighlighter Value="Delphi"/>
     
    5757        <ResourceBaseClass Value="Form"/>
    5858        <UnitName Value="UMainForm"/>
     59        <IsVisibleTab Value="True"/>
    5960        <EditorIndex Value="0"/>
    6061        <WindowIndex Value="0"/>
    61         <TopLine Value="268"/>
    62         <CursorPos X="38" Y="171"/>
    63         <UsageCount Value="50"/>
     62        <TopLine Value="302"/>
     63        <CursorPos X="47" Y="319"/>
     64        <UsageCount Value="53"/>
    6465        <Loaded Value="True"/>
    6566        <LoadedDesigner Value="True"/>
     
    181182      <Unit16>
    182183        <Filename Value="/usr/share/fpcsrc/rtl/objpas/classes/classesh.inc"/>
    183         <WindowIndex Value="0"/>
    184         <TopLine Value="254"/>
    185         <CursorPos X="27" Y="265"/>
    186         <UsageCount Value="9"/>
     184        <EditorIndex Value="2"/>
     185        <WindowIndex Value="0"/>
     186        <TopLine Value="246"/>
     187        <CursorPos X="21" Y="273"/>
     188        <UsageCount Value="12"/>
     189        <Loaded Value="True"/>
    187190        <DefaultSyntaxHighlighter Value="Delphi"/>
    188191      </Unit16>
    189192      <Unit17>
    190193        <Filename Value="/usr/share/fpcsrc/rtl/objpas/classes/lists.inc"/>
    191         <WindowIndex Value="0"/>
    192         <TopLine Value="526"/>
    193         <CursorPos X="1" Y="528"/>
    194         <UsageCount Value="9"/>
     194        <EditorIndex Value="3"/>
     195        <WindowIndex Value="0"/>
     196        <TopLine Value="588"/>
     197        <CursorPos X="3" Y="593"/>
     198        <UsageCount Value="12"/>
     199        <Loaded Value="True"/>
    195200        <DefaultSyntaxHighlighter Value="Delphi"/>
    196201      </Unit17>
     
    206211        <Filename Value="../Specialized/ListDouble.pas"/>
    207212        <UnitName Value="ListDouble"/>
    208         <EditorIndex Value="13"/>
     213        <EditorIndex Value="12"/>
    209214        <WindowIndex Value="0"/>
    210215        <TopLine Value="1"/>
    211216        <CursorPos X="12" Y="21"/>
    212         <UsageCount Value="23"/>
     217        <UsageCount Value="25"/>
    213218        <Loaded Value="True"/>
    214219      </Unit19>
     
    216221        <Filename Value="../Specialized/ListInteger.pas"/>
    217222        <UnitName Value="ListInteger"/>
    218         <EditorIndex Value="14"/>
     223        <EditorIndex Value="13"/>
    219224        <WindowIndex Value="0"/>
    220225        <TopLine Value="1"/>
    221226        <CursorPos X="25" Y="17"/>
    222         <UsageCount Value="23"/>
     227        <UsageCount Value="25"/>
    223228        <Loaded Value="True"/>
    224229      </Unit20>
     
    226231        <Filename Value="../Specialized/ListObject.pas"/>
    227232        <UnitName Value="ListObject"/>
    228         <EditorIndex Value="16"/>
    229         <WindowIndex Value="0"/>
    230         <TopLine Value="2"/>
    231         <CursorPos X="1" Y="33"/>
    232         <UsageCount Value="23"/>
     233        <EditorIndex Value="15"/>
     234        <WindowIndex Value="0"/>
     235        <TopLine Value="33"/>
     236        <CursorPos X="12" Y="56"/>
     237        <UsageCount Value="25"/>
    233238        <Loaded Value="True"/>
    234239      </Unit21>
     
    240245        <TopLine Value="1"/>
    241246        <CursorPos X="23" Y="21"/>
    242         <UsageCount Value="23"/>
     247        <UsageCount Value="25"/>
    243248        <Loaded Value="True"/>
    244249      </Unit22>
     
    250255        <TopLine Value="1"/>
    251256        <CursorPos X="23" Y="24"/>
    252         <UsageCount Value="23"/>
     257        <UsageCount Value="25"/>
    253258        <Loaded Value="True"/>
    254259      </Unit23>
     
    260265        <TopLine Value="1"/>
    261266        <CursorPos X="23" Y="13"/>
    262         <UsageCount Value="23"/>
     267        <UsageCount Value="25"/>
    263268        <Loaded Value="True"/>
    264269      </Unit24>
     
    270275        <TopLine Value="1"/>
    271276        <CursorPos X="23" Y="24"/>
    272         <UsageCount Value="23"/>
     277        <UsageCount Value="25"/>
    273278        <Loaded Value="True"/>
    274279      </Unit25>
     
    280285        <TopLine Value="1"/>
    281286        <CursorPos X="1" Y="27"/>
    282         <UsageCount Value="23"/>
     287        <UsageCount Value="25"/>
    283288        <Loaded Value="True"/>
    284289      </Unit26>
     
    290295        <TopLine Value="1"/>
    291296        <CursorPos X="29" Y="17"/>
    292         <UsageCount Value="23"/>
     297        <UsageCount Value="25"/>
    293298        <Loaded Value="True"/>
    294299      </Unit27>
     
    299304        <TopLine Value="1"/>
    300305        <CursorPos X="1" Y="2"/>
    301         <UsageCount Value="23"/>
     306        <UsageCount Value="25"/>
    302307        <Loaded Value="True"/>
    303308        <DefaultSyntaxHighlighter Value="None"/>
     
    309314        <TopLine Value="1"/>
    310315        <CursorPos X="20" Y="12"/>
    311         <UsageCount Value="23"/>
     316        <UsageCount Value="25"/>
    312317        <Loaded Value="True"/>
    313318        <DefaultSyntaxHighlighter Value="None"/>
     
    317322        <EditorIndex Value="31"/>
    318323        <WindowIndex Value="0"/>
    319         <TopLine Value="1"/>
    320         <CursorPos X="38" Y="19"/>
    321         <UsageCount Value="23"/>
     324        <TopLine Value="23"/>
     325        <CursorPos X="14" Y="40"/>
     326        <UsageCount Value="25"/>
    322327        <Loaded Value="True"/>
    323328        <DefaultSyntaxHighlighter Value="None"/>
     
    325330      <Unit31>
    326331        <Filename Value="../Generic/ListImplementation.tpl"/>
    327         <IsVisibleTab Value="True"/>
    328332        <EditorIndex Value="33"/>
    329333        <WindowIndex Value="0"/>
    330         <TopLine Value="128"/>
    331         <CursorPos X="69" Y="151"/>
    332         <UsageCount Value="23"/>
     334        <TopLine Value="114"/>
     335        <CursorPos X="3" Y="116"/>
     336        <UsageCount Value="25"/>
    333337        <Loaded Value="True"/>
    334338        <DefaultSyntaxHighlighter Value="None"/>
     
    340344        <TopLine Value="23"/>
    341345        <CursorPos X="1" Y="2"/>
    342         <UsageCount Value="23"/>
     346        <UsageCount Value="25"/>
    343347        <Loaded Value="True"/>
    344348        <DefaultSyntaxHighlighter Value="None"/>
     
    350354        <TopLine Value="1"/>
    351355        <CursorPos X="1" Y="9"/>
    352         <UsageCount Value="23"/>
     356        <UsageCount Value="25"/>
    353357        <Loaded Value="True"/>
    354358        <DefaultSyntaxHighlighter Value="None"/>
     
    361365        <TopLine Value="1"/>
    362366        <CursorPos X="32" Y="18"/>
    363         <UsageCount Value="23"/>
     367        <UsageCount Value="25"/>
    364368        <Loaded Value="True"/>
    365369      </Unit34>
     
    370374        <TopLine Value="1"/>
    371375        <CursorPos X="42" Y="15"/>
    372         <UsageCount Value="21"/>
     376        <UsageCount Value="23"/>
    373377        <Loaded Value="True"/>
    374378        <DefaultSyntaxHighlighter Value="None"/>
     
    381385        <TopLine Value="1"/>
    382386        <CursorPos X="1" Y="22"/>
    383         <UsageCount Value="21"/>
     387        <UsageCount Value="23"/>
    384388        <Loaded Value="True"/>
    385389      </Unit36>
     
    390394        <TopLine Value="1"/>
    391395        <CursorPos X="32" Y="12"/>
    392         <UsageCount Value="21"/>
     396        <UsageCount Value="23"/>
    393397        <Loaded Value="True"/>
    394398        <DefaultSyntaxHighlighter Value="None"/>
     
    396400      <Unit38>
    397401        <Filename Value="../Generic/QueueImplementation.tpl"/>
    398         <EditorIndex Value="37"/>
     402        <EditorIndex Value="35"/>
    399403        <WindowIndex Value="0"/>
    400404        <TopLine Value="1"/>
    401405        <CursorPos X="33" Y="28"/>
    402         <UsageCount Value="21"/>
     406        <UsageCount Value="23"/>
    403407        <Loaded Value="True"/>
    404408        <DefaultSyntaxHighlighter Value="None"/>
     
    406410      <Unit39>
    407411        <Filename Value="../Generic/QueueInterface.tpl"/>
    408         <EditorIndex Value="38"/>
     412        <EditorIndex Value="36"/>
    409413        <WindowIndex Value="0"/>
    410414        <TopLine Value="1"/>
    411415        <CursorPos X="18" Y="14"/>
    412         <UsageCount Value="21"/>
     416        <UsageCount Value="23"/>
    413417        <Loaded Value="True"/>
    414418        <DefaultSyntaxHighlighter Value="None"/>
     
    435439        <EditorIndex Value="32"/>
    436440        <WindowIndex Value="0"/>
    437         <TopLine Value="49"/>
    438         <CursorPos X="24" Y="60"/>
    439         <UsageCount Value="20"/>
     441        <TopLine Value="50"/>
     442        <CursorPos X="9" Y="79"/>
     443        <UsageCount Value="22"/>
    440444        <Loaded Value="True"/>
    441445      </Unit42>
     
    484488      <Unit48>
    485489        <Filename Value="../../../../../Programy/Lazarus/fpc/2.4.3/source/rtl/objpas/classes/classesh.inc"/>
    486         <EditorIndex Value="10"/>
    487490        <WindowIndex Value="0"/>
    488491        <TopLine Value="871"/>
    489492        <CursorPos X="35" Y="884"/>
    490493        <UsageCount Value="16"/>
    491         <Loaded Value="True"/>
     494        <DefaultSyntaxHighlighter Value="Delphi"/>
    492495      </Unit48>
    493496      <Unit49>
    494497        <Filename Value="../../../../../Programy/Lazarus/fpc/2.4.3/source/rtl/objpas/classes/lists.inc"/>
    495         <EditorIndex Value="12"/>
    496498        <WindowIndex Value="0"/>
    497499        <TopLine Value="694"/>
    498500        <CursorPos X="12" Y="696"/>
    499501        <UsageCount Value="16"/>
    500         <Loaded Value="True"/>
     502        <DefaultSyntaxHighlighter Value="Delphi"/>
    501503      </Unit49>
    502504      <Unit50>
    503505        <Filename Value="../Generic/SetInterface.tpl"/>
    504         <EditorIndex Value="2"/>
     506        <EditorIndex Value="5"/>
    505507        <WindowIndex Value="0"/>
    506508        <TopLine Value="1"/>
    507509        <CursorPos X="1" Y="14"/>
    508         <UsageCount Value="15"/>
     510        <UsageCount Value="17"/>
    509511        <Loaded Value="True"/>
    510512        <DefaultSyntaxHighlighter Value="None"/>
     
    513515        <Filename Value="../Specialized/SetChar.pas"/>
    514516        <UnitName Value="SetChar"/>
    515         <EditorIndex Value="3"/>
     517        <EditorIndex Value="6"/>
    516518        <WindowIndex Value="0"/>
    517519        <TopLine Value="1"/>
    518520        <CursorPos X="1" Y="25"/>
    519         <UsageCount Value="15"/>
     521        <UsageCount Value="17"/>
    520522        <Loaded Value="True"/>
    521523      </Unit51>
    522524      <Unit52>
    523525        <Filename Value="../Generic/SetImplementation.tpl"/>
    524         <EditorIndex Value="1"/>
     526        <EditorIndex Value="4"/>
    525527        <WindowIndex Value="0"/>
    526528        <TopLine Value="1"/>
    527529        <CursorPos X="27" Y="15"/>
    528         <UsageCount Value="15"/>
     530        <UsageCount Value="17"/>
    529531        <Loaded Value="True"/>
    530532        <DefaultSyntaxHighlighter Value="None"/>
     
    532534      <Unit53>
    533535        <Filename Value="../Generic/RangeInterface.tpl"/>
    534         <EditorIndex Value="5"/>
     536        <EditorIndex Value="8"/>
    535537        <WindowIndex Value="0"/>
    536538        <TopLine Value="1"/>
    537539        <CursorPos X="23" Y="10"/>
    538         <UsageCount Value="15"/>
     540        <UsageCount Value="17"/>
    539541        <Loaded Value="True"/>
    540542        <DefaultSyntaxHighlighter Value="None"/>
     
    543545        <Filename Value="../Specialized/RangeDateTime.pas"/>
    544546        <UnitName Value="RangeDateTime"/>
    545         <EditorIndex Value="6"/>
     547        <EditorIndex Value="9"/>
    546548        <WindowIndex Value="0"/>
    547549        <TopLine Value="1"/>
    548550        <CursorPos X="14" Y="15"/>
    549         <UsageCount Value="15"/>
     551        <UsageCount Value="17"/>
    550552        <Loaded Value="True"/>
    551553      </Unit54>
    552554      <Unit55>
    553555        <Filename Value="../../../../../Programy/Lazarus/fpc/2.4.3/source/rtl/inc/systemh.inc"/>
    554         <EditorIndex Value="9"/>
    555556        <WindowIndex Value="0"/>
    556557        <TopLine Value="520"/>
    557558        <CursorPos X="11" Y="533"/>
    558559        <UsageCount Value="15"/>
    559         <Loaded Value="True"/>
     560        <DefaultSyntaxHighlighter Value="Delphi"/>
    560561      </Unit55>
    561562      <Unit56>
    562563        <Filename Value="../Generic/RangeImplementation.tpl"/>
    563         <EditorIndex Value="7"/>
     564        <EditorIndex Value="10"/>
    564565        <WindowIndex Value="0"/>
    565566        <TopLine Value="1"/>
    566567        <CursorPos X="14" Y="18"/>
    567         <UsageCount Value="15"/>
     568        <UsageCount Value="17"/>
    568569        <Loaded Value="True"/>
    569570        <DefaultSyntaxHighlighter Value="None"/>
     
    572573        <Filename Value="../Specialized/ListVariant.pas"/>
    573574        <UnitName Value="ListVariant"/>
    574         <EditorIndex Value="4"/>
     575        <EditorIndex Value="7"/>
    575576        <WindowIndex Value="0"/>
    576577        <TopLine Value="2"/>
    577578        <CursorPos X="30" Y="8"/>
    578         <UsageCount Value="15"/>
     579        <UsageCount Value="17"/>
    579580        <Loaded Value="True"/>
    580581      </Unit57>
    581582      <Unit58>
    582583        <Filename Value="../ReadMe.txt"/>
    583         <EditorIndex Value="36"/>
     584        <EditorIndex Value="34"/>
    584585        <WindowIndex Value="0"/>
    585586        <TopLine Value="1"/>
    586587        <CursorPos X="24" Y="7"/>
    587         <UsageCount Value="14"/>
     588        <UsageCount Value="16"/>
    588589        <Loaded Value="True"/>
    589590        <DefaultSyntaxHighlighter Value="None"/>
     
    592593        <Filename Value="../Specialized/ListByte.pas"/>
    593594        <UnitName Value="ListByte"/>
    594         <EditorIndex Value="15"/>
     595        <EditorIndex Value="14"/>
    595596        <WindowIndex Value="0"/>
    596597        <TopLine Value="1"/>
    597598        <CursorPos X="19" Y="15"/>
    598         <UsageCount Value="14"/>
     599        <UsageCount Value="16"/>
    599600        <Loaded Value="True"/>
    600601      </Unit59>
    601602      <Unit60>
    602603        <Filename Value="../../../../../Programy/Lazarus/fpc/2.4.3/source/rtl/objpas/sysutils/sysstrh.inc"/>
    603         <EditorIndex Value="34"/>
    604604        <WindowIndex Value="0"/>
    605605        <TopLine Value="70"/>
    606606        <CursorPos X="10" Y="84"/>
    607607        <UsageCount Value="10"/>
    608         <Loaded Value="True"/>
     608        <DefaultSyntaxHighlighter Value="Delphi"/>
    609609      </Unit60>
    610610      <Unit61>
    611611        <Filename Value="../../../../../Programy/Lazarus/fpc/2.4.3/source/rtl/objpas/sysutils/sysstr.inc"/>
    612         <EditorIndex Value="35"/>
    613612        <WindowIndex Value="0"/>
    614613        <TopLine Value="162"/>
    615614        <CursorPos X="3" Y="168"/>
    616615        <UsageCount Value="10"/>
    617         <Loaded Value="True"/>
     616        <DefaultSyntaxHighlighter Value="Delphi"/>
    618617      </Unit61>
    619618      <Unit62>
    620619        <Filename Value="../../../../../Programy/Lazarus/fpc/2.4.3/source/rtl/objpas/classes/streams.inc"/>
    621         <EditorIndex Value="11"/>
    622620        <WindowIndex Value="0"/>
    623621        <TopLine Value="518"/>
    624622        <CursorPos X="3" Y="521"/>
    625623        <UsageCount Value="10"/>
    626         <Loaded Value="True"/>
     624        <DefaultSyntaxHighlighter Value="Delphi"/>
    627625      </Unit62>
    628626      <Unit63>
     
    632630        <CursorPos X="25" Y="341"/>
    633631        <UsageCount Value="10"/>
     632        <DefaultSyntaxHighlighter Value="Delphi"/>
    634633      </Unit63>
    635634      <Unit64>
     
    639638        <CursorPos X="11" Y="1549"/>
    640639        <UsageCount Value="10"/>
     640        <DefaultSyntaxHighlighter Value="Delphi"/>
    641641      </Unit64>
    642642      <Unit65>
     
    646646        <CursorPos X="3" Y="295"/>
    647647        <UsageCount Value="10"/>
     648        <DefaultSyntaxHighlighter Value="Delphi"/>
    648649      </Unit65>
     650      <Unit66>
     651        <Filename Value="/usr/share/fpcsrc/rtl/objpas/classes/cregist.inc"/>
     652        <WindowIndex Value="0"/>
     653        <TopLine Value="168"/>
     654        <CursorPos X="3" Y="174"/>
     655        <UsageCount Value="10"/>
     656        <DefaultSyntaxHighlighter Value="Delphi"/>
     657      </Unit66>
     658      <Unit67>
     659        <Filename Value="/usr/share/fpcsrc/packages/fcl-base/src/contnrs.pp"/>
     660        <UnitName Value="contnrs"/>
     661        <EditorIndex Value="1"/>
     662        <WindowIndex Value="0"/>
     663        <TopLine Value="60"/>
     664        <CursorPos X="26" Y="72"/>
     665        <UsageCount Value="12"/>
     666        <Loaded Value="True"/>
     667        <DefaultSyntaxHighlighter Value="Delphi"/>
     668      </Unit67>
     669      <Unit68>
     670        <Filename Value="/usr/share/fpcsrc/rtl/inc/objpash.inc"/>
     671        <EditorIndex Value="16"/>
     672        <WindowIndex Value="0"/>
     673        <TopLine Value="160"/>
     674        <CursorPos X="22" Y="177"/>
     675        <UsageCount Value="10"/>
     676        <Loaded Value="True"/>
     677        <DefaultSyntaxHighlighter Value="Delphi"/>
     678      </Unit68>
    649679    </Units>
    650     <JumpHistory Count="30" HistoryIndex="28">
     680    <JumpHistory Count="30" HistoryIndex="29">
    651681      <Position1>
    652         <Filename Value="../Generic/RangeInterface.tpl"/>
    653         <Caret Line="7" Column="45" TopLine="1"/>
     682        <Filename Value="../Specialized/ListObject.pas"/>
     683        <Caret Line="25" Column="24" TopLine="18"/>
    654684      </Position1>
    655685      <Position2>
    656         <Filename Value="../Generic/RangeInterface.tpl"/>
    657         <Caret Line="10" Column="43" TopLine="1"/>
     686        <Filename Value="/usr/share/fpcsrc/packages/fcl-base/src/contnrs.pp"/>
     687        <Caret Line="72" Column="26" TopLine="60"/>
    658688      </Position2>
    659689      <Position3>
    660         <Filename Value="../Generic/RangeImplementation.tpl"/>
    661         <Caret Line="5" Column="21" TopLine="1"/>
     690        <Filename Value="/usr/share/fpcsrc/rtl/objpas/classes/lists.inc"/>
     691        <Caret Line="585" Column="9" TopLine="580"/>
    662692      </Position3>
    663693      <Position4>
    664694        <Filename Value="../Generic/ListImplementation.tpl"/>
    665         <Caret Line="113" Column="3" TopLine="111"/>
     695        <Caret Line="345" Column="5" TopLine="342"/>
    666696      </Position4>
    667697      <Position5>
    668698        <Filename Value="../Generic/ListInterface.tpl"/>
    669         <Caret Line="29" Column="30" TopLine="4"/>
     699        <Caret Line="55" Column="60" TopLine="27"/>
    670700      </Position5>
    671701      <Position6>
    672         <Filename Value="../Generic/ListInterface.tpl"/>
    673         <Caret Line="30" Column="23" TopLine="3"/>
     702        <Filename Value="../Specialized/ListObject.pas"/>
     703        <Caret Line="54" Column="28" TopLine="26"/>
    674704      </Position6>
    675705      <Position7>
    676         <Filename Value="../Generic/ListImplementation.tpl"/>
    677         <Caret Line="272" Column="11" TopLine="266"/>
     706        <Filename Value="../Specialized/ListObject.pas"/>
     707        <Caret Line="26" Column="20" TopLine="9"/>
    678708      </Position7>
    679709      <Position8>
    680         <Filename Value="../Generic/ListImplementation.tpl"/>
    681         <Caret Line="280" Column="13" TopLine="277"/>
     710        <Filename Value="../Specialized/ListObject.pas"/>
     711        <Caret Line="19" Column="27" TopLine="9"/>
    682712      </Position8>
    683713      <Position9>
    684         <Filename Value="../Generic/ListImplementation.tpl"/>
    685         <Caret Line="87" Column="10" TopLine="78"/>
     714        <Filename Value="Demo.lpr"/>
     715        <Caret Line="11" Column="10" TopLine="1"/>
    686716      </Position9>
    687717      <Position10>
    688         <Filename Value="../Generic/ListInterface.tpl"/>
    689         <Caret Line="22" Column="59" TopLine="8"/>
     718        <Filename Value="Demo.lpr"/>
     719        <Caret Line="10" Column="38" TopLine="1"/>
    690720      </Position10>
    691721      <Position11>
    692         <Filename Value="../Specialized/ListByte.pas"/>
    693         <Caret Line="11" Column="23" TopLine="1"/>
     722        <Filename Value="Demo.lpr"/>
     723        <Caret Line="15" Column="1" TopLine="1"/>
    694724      </Position11>
    695725      <Position12>
    696         <Filename Value="../Specialized/ListByte.pas"/>
    697         <Caret Line="13" Column="35" TopLine="1"/>
     726        <Filename Value="Demo.lpr"/>
     727        <Caret Line="10" Column="20" TopLine="1"/>
    698728      </Position12>
    699729      <Position13>
    700         <Filename Value="../Generic/ListImplementation.tpl"/>
    701         <Caret Line="251" Column="9" TopLine="247"/>
     730        <Filename Value="Demo.lpr"/>
     731        <Caret Line="16" Column="3" TopLine="1"/>
    702732      </Position13>
    703733      <Position14>
    704         <Filename Value="../Generic/ListImplementation.tpl"/>
    705         <Caret Line="259" Column="30" TopLine="259"/>
     734        <Filename Value="UMainForm.pas"/>
     735        <Caret Line="87" Column="15" TopLine="77"/>
    706736      </Position14>
    707737      <Position15>
    708         <Filename Value="../Generic/ListImplementation.tpl"/>
    709         <Caret Line="265" Column="21" TopLine="259"/>
     738        <Filename Value="../Specialized/ListObject.pas"/>
     739        <Caret Line="56" Column="3" TopLine="28"/>
    710740      </Position15>
    711741      <Position16>
    712         <Filename Value="../Generic/ListInterface.tpl"/>
    713         <Caret Line="33" Column="34" TopLine="28"/>
     742        <Filename Value="../Specialized/ListObject.pas"/>
     743        <Caret Line="49" Column="14" TopLine="28"/>
    714744      </Position16>
    715745      <Position17>
    716         <Filename Value="../Generic/ListImplementation.tpl"/>
    717         <Caret Line="4" Column="34" TopLine="1"/>
     746        <Filename Value="../Specialized/ListObject.pas"/>
     747        <Caret Line="56" Column="12" TopLine="28"/>
    718748      </Position17>
    719749      <Position18>
    720         <Filename Value="../Generic/ListImplementation.tpl"/>
    721         <Caret Line="202" Column="28" TopLine="194"/>
     750        <Filename Value="../Generic/ListInterface.tpl"/>
     751        <Caret Line="54" Column="46" TopLine="26"/>
    722752      </Position18>
    723753      <Position19>
    724         <Filename Value="../Generic/ListImplementation.tpl"/>
    725         <Caret Line="4" Column="73" TopLine="1"/>
     754        <Filename Value="Demo.lpr"/>
     755        <Caret Line="8" Column="26" TopLine="1"/>
    726756      </Position19>
    727757      <Position20>
    728         <Filename Value="../Generic/ListImplementation.tpl"/>
    729         <Caret Line="1" Column="23" TopLine="1"/>
     758        <Filename Value="../Specialized/ListObject.pas"/>
     759        <Caret Line="51" Column="11" TopLine="28"/>
    730760      </Position20>
    731761      <Position21>
    732         <Filename Value="../Generic/ListImplementation.tpl"/>
    733         <Caret Line="115" Column="17" TopLine="101"/>
     762        <Filename Value="../Specialized/ListObject.pas"/>
     763        <Caret Line="56" Column="1" TopLine="28"/>
    734764      </Position21>
    735765      <Position22>
    736         <Filename Value="../Generic/ListImplementation.tpl"/>
    737         <Caret Line="210" Column="20" TopLine="196"/>
     766        <Filename Value="UMainForm.pas"/>
     767        <Caret Line="94" Column="9" TopLine="77"/>
    738768      </Position22>
    739769      <Position23>
    740         <Filename Value="../Generic/ListImplementation.tpl"/>
    741         <Caret Line="5" Column="59" TopLine="1"/>
     770        <Filename Value="UMainForm.pas"/>
     771        <Caret Line="96" Column="7" TopLine="77"/>
    742772      </Position23>
    743773      <Position24>
    744         <Filename Value="../Specialized/ListByte.pas"/>
    745         <Caret Line="20" Column="16" TopLine="1"/>
     774        <Filename Value="../Specialized/ListObject.pas"/>
     775        <Caret Line="25" Column="30" TopLine="11"/>
    746776      </Position24>
    747777      <Position25>
    748         <Filename Value="../Generic/ListImplementation.tpl"/>
    749         <Caret Line="11" Column="18" TopLine="1"/>
     778        <Filename Value="../Specialized/ListObject.pas"/>
     779        <Caret Line="49" Column="45" TopLine="33"/>
    750780      </Position25>
    751781      <Position26>
    752         <Filename Value="../Generic/ListInterface.tpl"/>
    753         <Caret Line="40" Column="37" TopLine="32"/>
     782        <Filename Value="UMainForm.pas"/>
     783        <Caret Line="299" Column="17" TopLine="272"/>
    754784      </Position26>
    755785      <Position27>
    756         <Filename Value="../Generic/ListInterface.tpl"/>
    757         <Caret Line="51" Column="61" TopLine="26"/>
     786        <Filename Value="UMainForm.pas"/>
     787        <Caret Line="247" Column="19" TopLine="238"/>
    758788      </Position27>
    759789      <Position28>
    760         <Filename Value="../Generic/ListImplementation.tpl"/>
    761         <Caret Line="151" Column="60" TopLine="139"/>
     790        <Filename Value="UMainForm.pas"/>
     791        <Caret Line="273" Column="62" TopLine="257"/>
    762792      </Position28>
    763793      <Position29>
    764         <Filename Value="../Generic/ListImplementation.tpl"/>
    765         <Caret Line="142" Column="39" TopLine="128"/>
     794        <Filename Value="UMainForm.pas"/>
     795        <Caret Line="319" Column="32" TopLine="292"/>
    766796      </Position29>
    767797      <Position30>
    768         <Filename Value="../Generic/ListInterface.tpl"/>
    769         <Caret Line="19" Column="38" TopLine="1"/>
     798        <Filename Value="UMainForm.pas"/>
     799        <Caret Line="258" Column="45" TopLine="241"/>
    770800      </Position30>
    771801    </JumpHistory>
     
    797827    </CodeGeneration>
    798828    <Linking>
     829      <Debugging>
     830        <GenerateDebugInfo Value="True"/>
     831        <UseHeaptrc Value="True"/>
     832      </Debugging>
    799833      <Options>
    800834        <Win32>
     
    804838    </Linking>
    805839    <Other>
     840      <CompilerMessages>
     841        <UseMsgFile Value="True"/>
     842      </CompilerMessages>
    806843      <CompilerPath Value="$(CompPath)"/>
    807844    </Other>
    808845  </CompilerOptions>
    809846  <Debugging>
    810     <BreakPoints Count="1">
    811       <Item1>
    812         <Source Value="../Specialized/ListChar.pas"/>
    813         <Line Value="78"/>
    814       </Item1>
    815     </BreakPoints>
    816847    <Exceptions Count="3">
    817848      <Item1>
  • Generics/TemplateGenerics/Demo/Demo.lpr

    r70 r78  
    88  {$ENDIF}{$ENDIF}
    99  Interfaces, // this includes the LCL widgetset
    10   Forms, UMainForm, TemplateGenerics
    11   { you can add units after this };
     10  Forms, SysUtils, UMainForm, TemplateGenerics;
    1211
    1312{$R *.res}
    1413
     14const
     15  HeapTraceLogFileName = 'heaptrclog.trc';
    1516begin
     17  DeleteFile(ExtractFilePath(ParamStr(0)) + HeapTraceLogFileName);
     18  SetHeapTraceOutput(ExtractFilePath(ParamStr(0)) + HeapTraceLogFileName);
    1619  Application.Initialize;
    1720  Application.CreateForm(TMainForm, MainForm);
  • Generics/TemplateGenerics/Demo/UMainForm.lfm

    r76 r78  
    44  Top = 129
    55  Width = 478
     6  ActiveControl = ButtonIntegerList
    67  Caption = 'Template generics demo'
    78  ClientHeight = 397
     
    7475    TabOrder = 6
    7576  end
     77  object ButtonListObject: TButton
     78    Left = 7
     79    Height = 25
     80    Top = 163
     81    Width = 113
     82    Caption = 'TListObject'
     83    OnClick = ButtonListObjectClick
     84    TabOrder = 7
     85  end
    7686end
  • Generics/TemplateGenerics/Demo/UMainForm.pas

    r76 r78  
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    99  ComCtrls, ListInteger, ListString, DictionaryString, QueueInteger, ListChar,
    10   ListPointer, DateUtils, ListVariant;
     10  ListPointer, DateUtils, ListVariant, Contnrs, ListObject;
    1111
    1212type
     
    1515
    1616  TMainForm = class(TForm)
     17    ButtonListObject: TButton;
    1718    ButtonBenchmark: TButton;
    1819    ButtonCharList: TButton;
     
    2627    procedure ButtonDictionaryStringClick(Sender: TObject);
    2728    procedure ButtonIntegerListClick(Sender: TObject);
     29    procedure ButtonListObjectClick(Sender: TObject);
    2830    procedure ButtonQueueIntegerClick(Sender: TObject);
    2931    procedure ButtonStringListClick(Sender: TObject);
     
    7173    MoveItems(3, 2, 3);
    7274    WriteLn('Implode: ' + Implode(',', IntToStr));
     75  finally
     76    Free;
     77  end;
     78end;
     79
     80function ObjectToStr(Obj: TObject): string;
     81begin
     82  Result := Obj.ClassName;
     83end;
     84
     85procedure TMainForm.ButtonListObjectClick(Sender: TObject);
     86var
     87  List: TListObject;
     88  I: Integer;
     89begin
     90  MemoOutput.Clear;
     91  WriteLn('TListObject test');
     92  List := TListObject.Create;
     93  with List do try
     94    AddArray([TObject.Create, TObject.Create, TObject.Create, TObject.Create]);
     95    WriteLn('Implode: ' + Implode(',', ObjectToStr));
     96    Clear;
     97    for I := 0 to 10 do Add(TObject.Create);
     98    WriteLn('Implode: ' + Implode(',', ObjectToStr));
     99    WriteLn('Count: ' + IntToStr(Count));
     100    WriteLn('Implode: ' + Implode(',', ObjectToStr));
     101    WriteLn('Reverse');
     102    Reverse;
     103    WriteLn('Implode: ' + Implode(',', ObjectToStr));
     104    MoveItems(3, 2, 3);
     105    WriteLn('Implode: ' + Implode(',', ObjectToStr));
    73106  finally
    74107    Free;
     
    207240    List.Clear;
    208241
     242    for I := 0 to 1000000 do
     243      List.Add(1);
     244    StartTime := Now;
     245    I := 0;
     246    repeat
     247      List.Exchange(300000, 700000);
     248      Inc(I);
     249    until (Now - StartTime) > OneSecond;
     250    WriteLn('Exchange: ' + IntToStr(I) + ' ops/sec');
     251    List.Clear;
     252
     253    for I := 0 to 1000000 do
     254      List.Add(1);
     255    StartTime := Now;
     256    I := 0;
     257    repeat
     258      List.IndexOf(Pointer(I mod List.Count));
     259      Inc(I);
     260    until (Now - StartTime) > OneSecond;
     261    WriteLn('IndexOf: ' + IntToStr(I) + ' ops/sec');
     262    List.Clear;
    209263  finally
    210264    List.Free;
     
    238292    WriteLn('Delete: ' + IntToStr(I) + ' ops/sec');
    239293
    240       for I := 0 to 1000000 do
    241       List2.Add(1);
     294    for I := 0 to 1000000 do
     295    List2.Add(1);
    242296    StartTime := Now;
    243297    I := 0;
     
    247301    until (Now - StartTime) > OneSecond;
    248302    WriteLn('Move: ' + IntToStr(I) + ' ops/sec');
     303
     304    for I := 0 to 1000000 do
     305    List2.Add(1);
     306    StartTime := Now;
     307    I := 0;
     308    repeat
     309      List2.Exchange(300000, 700000);
     310      Inc(I);
     311    until (Now - StartTime) > OneSecond;
     312    WriteLn('Exchange: ' + IntToStr(I) + ' ops/sec');
     313
     314    for I := 0 to 1000000 do
     315    List2.Add(1);
     316    StartTime := Now;
     317    I := 0;
     318    repeat
     319      List2.IndexOf(Pointer(I mod List.Count));
     320      Inc(I);
     321    until (Now - StartTime) > OneSecond;
     322    WriteLn('IndexOf: ' + IntToStr(I) + ' ops/sec');
    249323
    250324  finally
  • Generics/TemplateGenerics/Generic/ListImplementation.tpl

    r77 r78  
    1717begin
    1818  Result := FItems[Index];
    19 end;
    20 
    21 function TGList.GetCount: TListIndex;
    22 begin
    23   Result := FCount;
    2419end;
    2520
     
    8984end;
    9085
     86procedure TGList.Contract;
     87begin
     88  if (Capacity > 256) and (FCount < Capacity shr 2) then
     89  begin
     90    Capacity := Capacity shr 1;
     91  end;
     92end;
     93
    9194function TGList.Extract(Item: TListItem): TListItem;
    9295var
     
    344347  FCount := FCount - 1;
    345348  System.Move(FItems[Index + 1], FItems[Index], (FCount - Index) * SizeOf(TListItem));
    346   // Shrink the list if appropriate
    347   if (Capacity > 256) and (FCount < Capacity shr 2) then
    348   begin
    349     Capacity := Capacity shr 1;
    350   end;
     349  Contract;
    351350end;
    352351
  • Generics/TemplateGenerics/Generic/ListInterface.tpl

    r77 r78  
    1414    FCount: TListIndex;
    1515    function Get(Index: TListIndex): TListItem;
    16     function GetCount: TListIndex;
    1716    function GetCapacity: TListIndex;
    1817    procedure SetCapacity(const AValue: TListIndex);
    19     procedure Put(Index: TListIndex; const AValue: TListItem);
     18    procedure Put(Index: TListIndex; const AValue: TListItem); virtual;
    2019    procedure SetCount(const AValue: TListIndex);
    2120    procedure QuickSort(L, R : TListIndex; Compare: TGListSortCompare);
     
    2322    // All items
    2423    procedure Reverse;
    25     procedure Clear;
     24    procedure Clear; virtual;
    2625    procedure Expand;
     26    procedure Contract;
    2727    procedure Sort(Compare: TGListSortCompare);
    2828    function Implode(Separator: string; Converter: TGListStringConverter): string;
     
    3434    // One item
    3535    function Add(Item: TListItem): TListIndex;
    36     procedure Delete(Index: TListIndex);
     36    procedure Delete(Index: TListIndex); virtual;
    3737    function Extract(Item: TListItem): TListItem;
    3838    procedure Exchange(Index1, Index2: TListIndex);
     
    5151    function IndexOfList(List: TGList; Start: TListIndex = 0): TListIndex;
    5252    // Other
    53     property Count: TListIndex read GetCount write SetCount;
     53    property Count: TListIndex read FCount write SetCount;
    5454    property Capacity: TListIndex read GetCapacity write SetCapacity;
    5555    // Array
  • Generics/TemplateGenerics/Specialized/ListObject.pas

    r71 r78  
    1515type
    1616
    17   { TObjectList }
     17  { TListObject }
    1818
    19   TObjectList = class(TGList)
    20     //OwnObjects: Boolean;
     19  TListObject = class(TGList)
     20  private
     21    procedure Put(Index: TListIndex; const AValue: TListItem); override;
     22  public
     23    OwnObjects: Boolean;
     24    procedure Delete(Index: TListIndex); override;
     25    procedure Clear; override;
     26    constructor Create;
    2127    destructor Destroy; override;
    2228  end;
     
    2935{ TObjectList }
    3036
    31 destructor TObjectList.Destroy;
     37procedure TListObject.Put(Index: TListIndex; const AValue: TListItem);
    3238begin
     39  if OwnObjects then FItems[Index].Free;
     40  inherited Put(Index, AValue);
     41end;
     42
     43procedure TListObject.Delete(Index: TListIndex);
     44begin
     45  if OwnObjects then FItems[Index].Free;
     46  inherited Delete(Index);
     47end;
     48
     49procedure TListObject.Clear;
     50var
     51  I: TListIndex;
     52begin
     53  if OwnObjects then begin
     54    I := 0;
     55    while I < Count do begin
     56      FItems[I].Free;
     57      I := I + 1;
     58    end;
     59  end;
     60  inherited Clear;
     61end;
     62
     63constructor TListObject.Create;
     64begin
     65  inherited;
     66  OwnObjects := True;
     67end;
     68
     69destructor TListObject.Destroy;
     70begin
     71  Clear;
    3372  inherited Destroy;
    3473end;
Note: See TracChangeset for help on using the changeset viewer.