[Back to OOP SWAG index] [Back to Main SWAG index] [Original]

    {
    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 *************}

[Back to OOP SWAG index] [Back to Main SWAG index] [Original]