home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 February / Chip_2000-02_cd.bin / zkuste / Delphi / navody / tt / objvm.exe / UNITS / LangValue.pas < prev    next >
Pascal/Delphi Source File  |  1998-06-27  |  6KB  |  152 lines

  1. {contains TLangValue - Value for macro language}
  2. unit LangValue;
  3. interface
  4. uses
  5.     LangValMessages,Classes;
  6.  
  7. type ILangValue=class;
  8.        {IValueOwner is interface of something that can contain ILangValue }
  9.      IValueOwner=class(TComponent)
  10.      public
  11.        procedure AddValue(const s:string;Value:ILangValue);virtual;abstract;
  12.        procedure RemoveValue(Value:ILangValue);virtual;abstract;
  13.      end;
  14.        {IValStack is an interface to stack of ILangValue. Implementaton }
  15.        {see in ValStack unit }
  16.      IValStack=class
  17.      protected
  18.        function rdFrameValues(No:integer):ILangValue;virtual;abstract;
  19.      public
  20.            {Pops a value from top of stack}
  21.        function Pop:ILangValue;virtual;abstract;
  22.            {Pushes a value to stack}
  23.        procedure Push(a:ILangValue);virtual;abstract;
  24.            {Removes a procedure call frame from top of stack}
  25.        procedure DropFrame;virtual;abstract;
  26.            {Provides access to topmost frame values}
  27.        property  FrameValues[No:Integer]:ILangValue read rdFrameValues;
  28.            {Counts values in frame}
  29.        function  FrameCount:integer;virtual;abstract;
  30.     end;
  31.        {ILangValue is a class providing all language objects functionality.  }
  32.        {Variables,Values,Procedures,Objects are implementation of ILangValue.}
  33.        {}
  34.      ILangValue=class(IValueOwner)
  35.      protected
  36.         function rdAsString:string;virtual;
  37.         procedure wrAsString(a:string);virtual;
  38.         function rdAsInteger:integer;virtual;
  39.         procedure wrAsInteger(a:integer);virtual;
  40.         function rdAsBoolean:boolean;virtual;
  41.         procedure wrAsBoolean(a:boolean);virtual;
  42.         function rdAsVariant:variant;virtual;
  43.         procedure wrAsVariant(a:variant);virtual;
  44.         function rdAsFloat:Extended;virtual;
  45.         procedure wrAsFloat(a:Extended);virtual;
  46.         function  rdValues(const s:string):ILangValue;virtual;
  47.      public
  48.           {Returns integer representation of ILangValue if posible otherwise raises exception}
  49.         property AsInteger:Integer read rdAsInteger write wrAsInteger;
  50.           {Returns string representation of ILangValue if posible otherwise raises exception}
  51.         property AsString:STring read rdAsSTring write wrAsString;
  52.           {Returns boolean representation of ILangValue if posible otherwise raises exception} 
  53.         property AsBoolean:Boolean read rdAsBoolean write wrAsBoolean;
  54.           {Returns Variant representation of ILangValue if posible otherwise raises exception}
  55.         property AsVariant:Variant read rdAsVariant write wrAsVariant;
  56.           {Returns float representation of ILangValue if posible otherwise raises exception}
  57.         property AsFloat:Extended read rdAsFloat write wrAsFloat;
  58.            {Execute value on given stack. if MustReturn is set to true }
  59.            {method have to leave one value to stack. It is expected that }
  60.            {Exec clears stack by DropFrame method. }
  61.         procedure Exec(S:IValStack;MustReturn:boolean);virtual;
  62.            {If this value has value named s returns true.}
  63.         function  HasValue(const s:string):boolean;virtual;
  64.            {Accessor for holded values}
  65.         property  Values[const s:string]:ILangValue read rdValues;
  66.             {Creates value equal to itself }
  67.         function  CreateEqu:ILangValue;virtual;abstract;
  68.             {Returns value placed inside. For example for variable}
  69.         function  GetValue:ILangValue;
  70.             {Sets value to given }
  71.         procedure SetValue(a:ILangValue);
  72.      end;
  73. implementation
  74. uses ValStack,VarLangValue;
  75. function  ILangValue.rdAsString;
  76.           begin
  77.             CantBeString;
  78.           end;
  79. procedure ILangValue.wrAsString;
  80.           begin
  81.             CantBeString;
  82.           end;
  83. function  ILangValue.rdAsInteger;
  84.           begin
  85.             CantBeInteger;
  86.           end;
  87. procedure ILangValue.wrAsInteger;
  88.           begin
  89.             CantBeInteger;
  90.           end;
  91. function  ILangValue.rdAsBoolean;
  92.           begin
  93.             CantBeBoolean;
  94.           end;
  95. procedure ILangValue.wrAsBoolean;
  96.           begin
  97.             CantBeBoolean;
  98.           end;
  99. function  ILangValue.rdAsVariant;
  100.           begin
  101.             CantBeVariant;
  102.           end;
  103. procedure ILangValue.wrAsVariant;
  104.           begin
  105.             CantBeVariant;
  106.           end;
  107. function  ILangValue.rdAsFloat;
  108.           begin
  109.             CantBeFloat;
  110.           end;
  111. procedure ILangValue.wrAsFloat;
  112.           begin
  113.             CantBeFloat;
  114.           end;
  115. function  ILangValue.rdValues;
  116.           begin
  117.             ContainsNoValues;
  118.           end;
  119. procedure ILangValue.Exec;
  120.           begin
  121.             NotExecutable;
  122.           end;
  123. function  ILangValue.HasValue;
  124.           begin
  125.             Result:=false;
  126.           end;
  127. function  ILangValue.GetValue;
  128.           Var s:TValStack;
  129.               v:TVarLangValue;
  130.           begin
  131.             v:=TVarLangValue.Create(nil);            v.AsInteger:=0;
  132.             s:=TValStack.Create;
  133.             s.Push(v);
  134.             Exec(s,true);
  135.             Result:=s.Pop;
  136.             s.Free;
  137.           end;
  138. procedure ILangValue.SetValue;
  139.           Var s:TValStack;
  140.               v:TVarLangValue;
  141.           begin
  142.             v:=TVarLangValue.Create(nil);
  143.             v.AsInteger:=1;
  144.             s:=TValStack.Create;
  145.             s.Push(a);
  146.             s.Push(v);
  147.             Exec(s,false);
  148.             s.Free;
  149.           end;
  150.  
  151. end.
  152.