diff --git a/src/shared/xdynrec.pas b/src/shared/xdynrec.pas
index 8ebac36188754ef6349bbb7bbc5147a1a0ccfe7a..ac55cf5d0360202e28589c97e5525e71253dc3e2 100644 (file)
--- a/src/shared/xdynrec.pas
+++ b/src/shared/xdynrec.pas
function addListItem (rec: TDynRecord): Boolean; inline;
public
+ {
type
TListEnumerator = record
private
function getCurrent (): TDynRecord; inline;
property Current: TDynRecord read getCurrent;
end;
+ }
public
constructor Create (const aname: AnsiString; atype: TType);
procedure setValue (const s: AnsiString);
- function GetEnumerator (): TListEnumerator;
+ function GetEnumerator (): TDynRecList.TEnumerator; inline;
public
property pasname: AnsiString read mPasName;
// number of records of the given instance
function instanceCount (const typename: AnsiString): Integer;
+ procedure setUserField (const fldname: AnsiString; v: LongInt);
+ procedure setUserField (const fldname: AnsiString; v: AnsiString);
+
public
property id: AnsiString read mId; // for map parser
property pasname: AnsiString read mPasName;
// ////////////////////////////////////////////////////////////////////////// //
+{
constructor TDynField.TListEnumerator.Create (alist: TDynRecList);
begin
mList := alist;
begin
result := mList[mCurIdx];
end;
+}
-function TDynField.GetEnumerator (): TListEnumerator;
+function TDynField.GetEnumerator (): TDynRecList.TEnumerator; inline;
begin
- result := TListEnumerator.Create(mRVal);
+ //result := TListEnumerator.Create(mRVal);
+ if (mRVal <> nil) then result := mRVal.GetEnumerator else result := TDynRecList.TEnumerator.Create(nil, 0);
end;
end;
+procedure TDynRecord.setUserField (const fldname: AnsiString; v: LongInt);
+var
+ fld: TDynField;
+begin
+ if (Length(fldname) = 0) then exit;
+ fld := field[fldname];
+ if (fld <> nil) then
+ begin
+ if (fld.mType <> fld.TType.TInt) or (fld.mEBS <> fld.TEBS.TNone) then
+ begin
+ raise Exception.Create(Format('invalid user field ''%s'' type', [fld.name]));
+ end;
+ end
+ else
+ begin
+ fld := TDynField.Create(fldname, fld.TType.TInt);
+ fld.mOwner := self;
+ fld.mIVal := v;
+ fld.mInternal := true;
+ fld.mDefined := true;
+ addField(fld);
+ end;
+end;
+
+
+procedure TDynRecord.setUserField (const fldname: AnsiString; v: AnsiString);
+var
+ fld: TDynField;
+begin
+ if (Length(fldname) = 0) then exit;
+ fld := field[fldname];
+ if (fld <> nil) then
+ begin
+ if (fld.mType <> fld.TType.TString) or (fld.mEBS <> fld.TEBS.TNone) then
+ begin
+ raise Exception.Create(Format('invalid user field ''%s'' type', [fld.name]));
+ end;
+ end
+ else
+ begin
+ fld := TDynField.Create(fldname, fld.TType.TString);
+ fld.mOwner := self;
+ fld.mSVal := v;
+ fld.mInternal := true;
+ fld.mDefined := true;
+ addField(fld);
+ end;
+end;
+
+
procedure TDynRecord.parseDef (pr: TTextParser);
var
fld: TDynField;