home *** CD-ROM | disk | FTP | other *** search
- {
- This post is just to demonstrate a very simple sorted collection using
- non-Object Types With the collection. If it is needed to store itself
- to a stream, it will need additional over-ridden methods to do that.
- I'm just posting this, because I wrote it several days ago to implement
- a simple Variable system in a script language For a menu Program that I
- wrote, and I was looking For an *easier* way to maintain the Variable
- list than With a linked list. To my astonishment, today, I needed a
- similar structure, and (ohmygosh) I found that I could *re-use* this
- code, by merely deriving a child class and adding another method or so.
- This is the first time that I have ever *re-used* an Object Type that I
- have modified. Of course, I haven't been actually using TurboVision for
- more than a month or so, so I haven't had much of a chance, but it is
- very nice to see that when people talk about "Object oriented
- Programming paradigm", they are not ONLY speaking in big Words, but that
- they also (apparently) are telling the truth.
-
- I'm not taking any responsibility if this overWrites your interrupt
- vector table, so be carefull. If you find any mistakes, or actually
- modify this code to become more usefull, I'd appreciate it if you could
- tell me- actually determining the best way to implement a new Object
- class is kind of difficult For me since I've only been doing this for
- about a month, trying to squeeze it in along With school and a job.
-
- Here's the code...
- {********* STARTS HERE **********}
- { Unit: STROBJ.PAS
- WRITTEN BY: Brian Pape
- DATE: 03/28/93
- Copyright 1993 by Brian Pape and Alphawave Technologies
- This Unit contains String Type Objects
- }
- {$P+} { Enable open String parameters. Replace by $V- For TP 6.0 or lower }
- Unit strobj;
-
- Interface
-
- Uses
- Objects;
-
- Type
- str20 = String[20];
-
- PVarType = ^TVarType;
- TVarType = Record
- name : str20;
- value : String;
- end; { TVarType }
-
- PVarCollection = ^TVarCollection;
- TVarCollection = Object(TSortedCollection)
- Constructor init(Alimit,Adelta:Integer);
- Function KeyOf(item:Pointer):Pointer; virtual;
- Function Compare(Key1,Key2:Pointer):Integer; virtual;
- Procedure freeitem(Item:Pointer); virtual;
-
- { This Function will return the value of a Variable in a TVarCollection }
- Function getVar(s:String):String;
-
- { Adds a PVarType Record to the collection, without having to manually
- create, and allocate memory for, a Record Type }
- Procedure add(aname:str20;avalue:String);
- end; { TVarCollection }
-
- Implementation
-
- Constructor TVarCollection.init(ALimit,ADelta:Integer);
- begin
- inherited init(ALimit,ADelta);
- end; { TVarCollection.init }
-
- Function TVarCollection.KeyOf(item:Pointer):Pointer;
- begin
- KeyOf := @(TVarType(item^).name);
- end; { TVarCollection.KeyOf }
-
- Function TVarCollection.Compare(Key1,Key2:Pointer):Integer;
- begin
- if String(Key1^) > String(Key2^) then
- Compare := 1
- else if String(Key1^) = String(Key2^) then
- Compare := 0
- else Compare := -1;
- end; { TVarCollection.Compare }
-
- Procedure TVarCollection.freeitem(Item:Pointer);
- begin
- dispose(Item);
- end; { freeitem }
-
- Function TVarCollection.getVar(s:String):String;
- Var
- t : TVarType;
- where : Integer;
- begin
- t.name := s;
- if Search(@t,where) then
- getVar := TVarType(at(where)^).value
- else
- getVar := '';
- end; { getVar }
-
-
- Procedure TVarCollection.add(aname:str20;avalue:String);
- Var
- rec : PVarType;
- begin
- rec := new(PVarType);
- rec^.name := aname;
- rec^.value := avalue;
- insert(rec);
- end; { add }
-
- begin
- end. { strobj }
- {*********** endS HERE *************}