|
- unit uutlEnumHelper;
-
- (* Package: Utils
- Prefix: utl - UTiLs
- Beschreibung: diese Unit stellt einen Mechanismus zur Verfügung, ohne viel Aufwand,
- Helper Klassen für Enums zu implementieren
- Verwendung:
- {$MACRO ON}
-
- interface
- {$define __ENUM_INTERFACE}
- {$define __ENUM_HELPER:=TSomeEnumH}{$define __ENUM_TYPE:=TSomeEnum}{$define __ENUM_LENGTH:=4}
- {$I uutlEnumHelper.inc}(
- E: (enVal1, enVal2, enVal3, enVal4);
- N: 'enVal1,enVal2,enVal3,enVal4';
- ); end;
- //... mehr davon
- {$undef __ENUM_INTERFACE}
-
- implementation
- {$define __ENUM_IMPLEMENTATION}
- {$define __ENUM_HELPER:=TSomeEnumH}{$define __ENUM_TYPE:=TSomeEnum}{$I uutlEnumHelper.inc}
- {$undef __ENUM_IMPLEMENTATION} *)
-
- interface
-
- uses
- SysUtils, StrUtils;
-
- type
- EConvertErrorAlias = SysUtils.EConvertError;
-
- function LookupString(const aStr, aTable: String; out found: integer): boolean;
- function PickString(const aTable: String; const aIndex: integer): string;
- function LookupVal(const aVal: Pointer; const aPtr: Pointer; const aStep, aCount: PtrInt; out found: integer): boolean;
-
- implementation
-
- function LookupString(const aStr, aTable: String; out found: integer): boolean;
- var
- tbl: string;
- i,p,k: integer;
- t: string;
- begin
- Result:= false;
- tbl:= aTable + ',';
- t:= '';
- k:= 0;
- i:= 1;
- while i < Length(tbl) do begin
- p:= PosEx(',',tbl,i);
- t:= Trim(Copy(tbl, i, p-i));
- i:= p+1;
- if CompareText(t, aStr)=0 then begin
- found:= k;
- Result:= true;
- exit;
- end else
- inc(k);
- end;
- end;
-
- function PickString(const aTable: String; const aIndex: integer): string;
- var
- tbl: String;
- k,i,p: integer;
- begin
- result:= '';
- tbl:= aTable + ',';
- i:= 1;
- k:= aIndex;
- while (k>0) and (i>0) do begin
- i:= PosEx(',',tbl, i) + 1;
- dec(k);
- end;
- p:= PosEx(',',tbl, i);
- if p<=0 then
- Result:= ''
- else
- Result:= Trim(Copy(tbl, i, p-i));
- end;
-
-
- function LookupVal(const aVal: Pointer; const aPtr: Pointer; const aStep, aCount: PtrInt; out found: integer): boolean;
- var
- pt: Pointer;
- i: integer;
- begin
- Result:= false;
- pt:= aPtr;
- for i:= 0 to aCount-1 do begin
- if CompareMem(pt, aVal, aStep) then begin
- Result:= true;
- found:= i;
- exit;
- end;
- inc(pt, aStep);
- end;
- end;
-
- end.
|