Procházet zdrojové kódy

* [utlEvent] use queue for async listener (instead of list)

* [utlGenerics] extract itm from HashSet and Map without finalizing it
* [utlMcf]      implemented ValueAt property
* some other stuff: bugfixing, improvements
master
Bergmann89 před 9 roky
rodič
revize
7b0d3ab0ad
5 změnil soubory, kde provedl 317 přidání a 87 odebrání
  1. +6
    -6
      uutlEvent.pas
  2. +7
    -6
      uutlGenerics.pas
  3. +7
    -0
      uutlMCF.pas
  4. +1
    -2
      uutlVariantEnum.pas
  5. +296
    -73
      uutlXmlHelper.pas

+ 6
- 6
uutlEvent.pas Zobrazit soubor

@@ -106,14 +106,14 @@ type


private type private type
TEventPair = specialize TutlPair<TObject, IutlEventArgs>; TEventPair = specialize TutlPair<TObject, IutlEventArgs>;
TEventList = class(specialize TutlSimpleList<TEventPair>)
TEventQueue = class(specialize TutlQueue<TEventPair>)
protected protected
procedure Release(var aItem: TEventPair; const aFreeItem: Boolean); override; procedure Release(var aItem: TEventPair; const aFreeItem: Boolean); override;
end; end;


private private
fEventLock: TCriticalSection; fEventLock: TCriticalSection;
fEvents: TEventList;
fEvents: TEventQueue;
fListener: IutlEventListener; fListener: IutlEventListener;


function PopEventPair(out aPair: TEventPair): Boolean; function PopEventPair(out aPair: TEventPair): Boolean;
@@ -259,7 +259,7 @@ end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TutlEventListenerAsync.TEventList////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TutlEventListenerAsync.TEventList//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlEventListenerAsync.TEventList.Release(var aItem: TEventPair; const aFreeItem: Boolean);
procedure TutlEventListenerAsync.TEventQueue.Release(var aItem: TEventPair; const aFreeItem: Boolean);
begin begin
aItem.first := nil; aItem.first := nil;
aItem.second := nil; aItem.second := nil;
@@ -275,7 +275,7 @@ begin
try try
result := not fEvents.IsEmpty; result := not fEvents.IsEmpty;
if result if result
then aPair := fEvents.PopFirst(false)
then aPair := fEvents.Dequeue
else FillByte(aPair, SizeOf(aPair), 0); else FillByte(aPair, SizeOf(aPair), 0);
finally finally
fEventLock.Leave; fEventLock.Leave;
@@ -291,7 +291,7 @@ begin
p.second := aEventArgs; p.second := aEventArgs;
fEventLock.Enter; fEventLock.Enter;
try try
fEvents.Add(p);
fEvents.Enqueue(p);
finally finally
fEventLock.Leave; fEventLock.Leave;
end; end;
@@ -313,7 +313,7 @@ begin
raise EArgumentNilException.Create('aListener'); raise EArgumentNilException.Create('aListener');
inherited Create; inherited Create;
fEventLock := TCriticalSection.Create; fEventLock := TCriticalSection.Create;
fEvents := TEventList.Create(true);
fEvents := TEventQueue.Create(true);
fListener := aListener; fListener := aListener;
end; end;




+ 7
- 6
uutlGenerics.pas Zobrazit soubor

@@ -239,7 +239,7 @@ type
function Add (constref aItem: T): Boolean; function Add (constref aItem: T): Boolean;
function Contains (constref aItem: T): Boolean; function Contains (constref aItem: T): Boolean;
function IndexOf (constref aItem: T): Integer; function IndexOf (constref aItem: T): Integer;
function Remove (constref aItem: T): Boolean;
function Remove (constref aItem: T; const aFreeItem: Boolean = true): Boolean;
procedure Delete (const aIndex: Integer); procedure Delete (const aIndex: Integer);


constructor Create (aComparer: IComparer; const aOwnsItems: Boolean); constructor Create (aComparer: IComparer; const aOwnsItems: Boolean);
@@ -454,7 +454,7 @@ type
function TryGetValue (constref aKey: TKey; out aValue: TValue): Boolean; function TryGetValue (constref aKey: TKey; out aValue: TValue): Boolean;
function IndexOf (constref aKey: TKey): Integer; function IndexOf (constref aKey: TKey): Integer;
function Contains (constref aKey: TKey): Boolean; function Contains (constref aKey: TKey): Boolean;
function Remove (constref aKey: TKey): Boolean;
function Remove (constref aKey: TKey; const aFreeItem: Boolean = true): Boolean;
procedure Delete (constref aKey: TKey); procedure Delete (constref aKey: TKey);
procedure DeleteAt (const aIndex: Integer); procedure DeleteAt (const aIndex: Integer);
procedure Clear; procedure Clear;
@@ -1326,13 +1326,13 @@ begin
end; end;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlCustomHashSet.Remove(constref aItem: T): Boolean;
function TutlCustomHashSet.Remove(constref aItem: T; const aFreeItem: Boolean): Boolean;
var var
i: Integer; i: Integer;
begin begin
result := TBinarySearch.Search(self, fComparer, aItem, i); result := TBinarySearch.Search(self, fComparer, aItem, i);
if result then if result then
DeleteIntern(i, true);
DeleteIntern(i, aFreeItem);
end; end;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1689,12 +1689,12 @@ begin
end; end;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlCustomMap.Remove(constref aKey: TKey): Boolean;
function TutlCustomMap.Remove(constref aKey: TKey; const aFreeItem: Boolean): Boolean;
var var
kvp: TKeyValuePair; kvp: TKeyValuePair;
begin begin
kvp.Key := aKey; kvp.Key := aKey;
result := fHashSetRef.Remove(kvp);
result := fHashSetRef.Remove(kvp, aFreeItem);
end; end;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -2106,6 +2106,7 @@ begin
p^.PushBackUsedIndex(Index); p^.PushBackUsedIndex(Index);
h^.Counter := Counter; h^.Counter := Counter;
h^.Data := aData; h^.Data := aData;
h^.TypeID := TypeID;
end; end;
end else end else
Update(aHandle, aData); Update(aHandle, aData);


+ 7
- 0
uutlMCF.pas Zobrazit soubor

@@ -61,6 +61,7 @@ type
function GetSectionByIndex(aIndex: Integer): TutlMCFSection; function GetSectionByIndex(aIndex: Integer): TutlMCFSection;
function GetValueCount: integer; function GetValueCount: integer;
function GetValueName(Index: integer): string; function GetValueName(Index: integer): string;
function GetValueAt(aIndex: integer): Variant;
protected protected
procedure ClearSections; procedure ClearSections;
procedure ClearValues; procedure ClearValues;
@@ -78,6 +79,7 @@ type


property ValueCount: integer read GetValueCount; property ValueCount: integer read GetValueCount;
property ValueNameAt[Index: integer]: string read GetValueName; property ValueNameAt[Index: integer]: string read GetValueName;
property ValueAt[Index: integer]: Variant read GetValueAt;


property SectionCount: integer read GetSectionCount; property SectionCount: integer read GetSectionCount;
property SectionNameAt[Index: integer]: string read GetSectionName; property SectionNameAt[Index: integer]: string read GetSectionName;
@@ -356,6 +358,11 @@ begin
Result:= FValues[Index]; Result:= FValues[Index];
end; end;


function TutlMCFSection.GetValueAt(aIndex: integer): Variant;
begin
result := TutlMcfValue(FValues.Objects[aIndex]).Value;
end;

procedure TutlMCFSection.ClearSections; procedure TutlMCFSection.ClearSections;
var var
i: integer; i: integer;


+ 1
- 2
uutlVariantEnum.pas Zobrazit soubor

@@ -183,8 +183,7 @@ begin
RaiseInvalidOp; RaiseInvalidOp;
src := PEnumVarData(@Source); src := PEnumVarData(@Source);
dst := PEnumVarData(@Dest); dst := PEnumVarData(@Dest);
dst^.vType := src^.vType;
dst^.vHelper := src^.vHelper;
dst^ := src^;
end; end;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


+ 296
- 73
uutlXmlHelper.pas Zobrazit soubor

@@ -41,7 +41,7 @@ type
// simple properties // simple properties
function GetElement: TDOMElement; function GetElement: TDOMElement;


property Node: TDOMElement read GetElement;
property Element: TDOMElement read GetElement;


// set value of current node // set value of current node
procedure SetString (const aValue: String); overload; procedure SetString (const aValue: String); overload;
@@ -52,28 +52,36 @@ type
procedure SetBool (const aValue: Boolean); procedure SetBool (const aValue: Boolean);


// get value of current node // get value of current node
function GetString (const aDefault: String): String;
function GetStringW (const aDefault: WideString): WideString;
function GetStringU (const aDefault: UnicodeString): UnicodeString;
function GetInt (const aDefault: Int64): Int64;
function GetFloat (const aDefault: Double): Double;
function GetBool (const aDefault: Boolean): Boolean;
function GetString (const aDefault: String = ''): String;
function GetStringW (const aDefault: WideString = ''): WideString;
function GetStringU (const aDefault: UnicodeString = ''): UnicodeString;
function GetInt (const aDefault: Int64 = 0): Int64;
function GetFloat (const aDefault: Double = 0): Double;
function GetBool (const aDefault: Boolean = false): Boolean;

// try get value of current node
function TryGetString (out aValue: String): Boolean;
function TryGetStringW (out aValue: WideString): Boolean;
function TryGetStringU (out aValue: UnicodeString): Boolean;
function TryGetInt (out aValue: Int64): Boolean;
function TryGetFloat (out aValue: Double): Boolean;
function TryGetBool (out aValue: Boolean): Boolean;


// set value of attribute // set value of attribute
procedure SetAttribString (const aName: DOMString; const aValue: String); overload; procedure SetAttribString (const aName: DOMString; const aValue: String); overload;
procedure SetAttribString (const aName: DOMString; const aValue: WideString); overload; procedure SetAttribString (const aName: DOMString; const aValue: WideString); overload;
procedure SetAttribString (const aName: DOMString; const aValue: UnicodeString); overload; procedure SetAttribString (const aName: DOMString; const aValue: UnicodeString); overload;
procedure SetAttribInt (const aName: DOMString; const aValue: Integer);
procedure SetAttribInt (const aName: DOMString; const aValue: Integer); overload;
procedure SetAttribFloat (const aName: DOMString; const aValue: Double); procedure SetAttribFloat (const aName: DOMString; const aValue: Double);
procedure SetAttribBool (const aName: DOMString; const aValue: Boolean); procedure SetAttribBool (const aName: DOMString; const aValue: Boolean);


// get value of attribute // get value of attribute
function GetAttribString (const aName: DOMString; const aDefault: String): String;
function GetAttribStringW (const aName: DOMString; const aDefault: WideString): WideString;
function GetAttribStringU (const aName: DOMString; const aDefault: UnicodeString): UnicodeString;
function GetAttribInt (const aName: DOMString; const aDefault: Int64): Int64;
function GetAttribFloat (const aName: DOMString; const aDefault: Double): Double;
function GetAttribBool (const aName: DOMString; const aDefault: Boolean): Boolean;
function GetAttribString (const aName: DOMString; const aDefault: String = ''): String;
function GetAttribStringW (const aName: DOMString; const aDefault: WideString = ''): WideString;
function GetAttribStringU (const aName: DOMString; const aDefault: UnicodeString = ''): UnicodeString;
function GetAttribInt (const aName: DOMString; const aDefault: Int64 = 0): Int64;
function GetAttribFloat (const aName: DOMString; const aDefault: Double = 0): Double;
function GetAttribBool (const aName: DOMString; const aDefault: Boolean = false): Boolean;


// get value of attribute // get value of attribute
function TryGetAttribString (const aName: DOMString; out aValue: String): Boolean; function TryGetAttribString (const aName: DOMString; out aValue: String): Boolean;
@@ -84,7 +92,8 @@ type
function TryGetAttribBool (const aName: DOMString; out aValue: Boolean): Boolean; function TryGetAttribBool (const aName: DOMString; out aValue: Boolean): Boolean;


// node operations // node operations
function Nodes (const aName: DOMString): IutlNodeEnumerator;
function Nodes (const aName: DOMString = ''): IutlNodeEnumerator;
function Node (const aName: DOMString; const aCanCreate: Boolean = true): TDOMElement;
function PrependNode (const aName: DOMString): TDOMElement; function PrependNode (const aName: DOMString): TDOMElement;
function AppendNode (const aName: DOMString): TDOMElement; function AppendNode (const aName: DOMString): TDOMElement;
procedure PrependText (const aText: DOMString); procedure PrependText (const aText: DOMString);
@@ -116,7 +125,7 @@ type
public { IutlXmlHelper } public { IutlXmlHelper }
function GetElement: TDOMElement; function GetElement: TDOMElement;


// set value of current node
// set value of current node
procedure SetString (const aValue: String); overload; procedure SetString (const aValue: String); overload;
procedure SetString (const aValue: WideString); overload; procedure SetString (const aValue: WideString); overload;
procedure SetString (const aValue: UnicodeString); overload; procedure SetString (const aValue: UnicodeString); overload;
@@ -132,11 +141,19 @@ type
function GetFloat (const aDefault: Double): Double; function GetFloat (const aDefault: Double): Double;
function GetBool (const aDefault: Boolean): Boolean; function GetBool (const aDefault: Boolean): Boolean;


// try get value of current node
function TryGetString (out aValue: String): Boolean;
function TryGetStringW (out aValue: WideString): Boolean;
function TryGetStringU (out aValue: UnicodeString): Boolean;
function TryGetInt (out aValue: Int64): Boolean;
function TryGetFloat (out aValue: Double): Boolean;
function TryGetBool (out aValue: Boolean): Boolean;

// set value of attribute // set value of attribute
procedure SetAttribString (const aName: DOMString; const aValue: String); overload; procedure SetAttribString (const aName: DOMString; const aValue: String); overload;
procedure SetAttribString (const aName: DOMString; const aValue: WideString); overload; procedure SetAttribString (const aName: DOMString; const aValue: WideString); overload;
procedure SetAttribString (const aName: DOMString; const aValue: UnicodeString); overload; procedure SetAttribString (const aName: DOMString; const aValue: UnicodeString); overload;
procedure SetAttribInt (const aName: DOMString; const aValue: Integer);
procedure SetAttribInt (const aName: DOMString; const aValue: Integer); overload;
procedure SetAttribFloat (const aName: DOMString; const aValue: Double); procedure SetAttribFloat (const aName: DOMString; const aValue: Double);
procedure SetAttribBool (const aName: DOMString; const aValue: Boolean); procedure SetAttribBool (const aName: DOMString; const aValue: Boolean);


@@ -158,6 +175,7 @@ type


// node operations // node operations
function Nodes (const aName: DOMString): IutlNodeEnumerator; function Nodes (const aName: DOMString): IutlNodeEnumerator;
function Node (const aName: DOMString; const aCanCreate: Boolean = true): TDOMElement;
function PrependNode (const aName: DOMString): TDOMElement; function PrependNode (const aName: DOMString): TDOMElement;
function AppendNode (const aName: DOMString): TDOMElement; function AppendNode (const aName: DOMString): TDOMElement;
procedure PrependText (const aText: DOMString); procedure PrependText (const aText: DOMString);
@@ -171,32 +189,61 @@ type
class function Create(const aElement: TDOMElement): IutlXmlHelper; class function Create(const aElement: TDOMElement): IutlXmlHelper;


public public
class function SetString (const aNode: TDOMNode; const aValue: String): TDOMNode; overload;
class function SetString (const aNode: TDOMNode; const aValue: WideString): TDOMNode; overload;
class function SetString (const aNode: TDOMNode; const aValue: UnicodeString): TDOMNode; overload;
class function SetInt (const aNode: TDOMNode; const aValue: Integer): TDOMNode;
class function SetFloat (const aNode: TDOMNode; const aValue: Double): TDOMNode;
class function SetBool (const aNode: TDOMNode; const aValue: Boolean): TDOMNode;

class function GetString (const aNode: TDOMNode; const aDefault: String): String;
class function GetStringW (const aNode: TDOMNode; const aDefault: WideString): WideString;
class function GetStringU (const aNode: TDOMNode; const aDefault: UnicodeString): UnicodeString;
class function GetInt (const aNode: TDOMNode; const aDefault: Int64): Int64;
class function GetFloat (const aNode: TDOMNode; const aDefault: Double): Double;
class function GetBool (const aNode: TDOMNode; const aDefault: Boolean): Boolean;

class function TryGetString (const aNode: TDOMNode; out aValue: String): Boolean;
class function TryGetStringW(const aNode: TDOMNode; out aValue: WideString): Boolean;
class function TryGetStringU(const aNode: TDOMNode; out aValue: UnicodeString): Boolean;
class function TryGetInt (const aNode: TDOMNode; out aValue: Int64): Boolean;
class function TryGetFloat (const aNode: TDOMNode; out aValue: Double): Boolean;
class function TryGetBool (const aNode: TDOMNode; out aValue: Boolean): Boolean;

class function Nodes (const aElement: TDOMElement; const aName: DOMString = ''): IutlNodeEnumerator;
class function PrependNode (const aElement: TDOMElement; const aName: DOMString): TDOMElement;
class function AppendNode (const aElement: TDOMElement; const aName: DOMString): TDOMElement;
class procedure PrependText (const aElement: TDOMElement; const aText: DOMString);
class procedure AppendText (const aElement: TDOMElement; const aText: DOMString);
// set value of current node
class function SetString (const aNode: TDOMNode; const aValue: String): TDOMNode; overload;
class function SetString (const aNode: TDOMNode; const aValue: WideString): TDOMNode; overload;
class function SetString (const aNode: TDOMNode; const aValue: UnicodeString): TDOMNode; overload;
class function SetInt (const aNode: TDOMNode; const aValue: Integer): TDOMNode; overload;
class function SetFloat (const aNode: TDOMNode; const aValue: Double): TDOMNode;
class function SetBool (const aNode: TDOMNode; const aValue: Boolean): TDOMNode;

// get value of current node
class function GetString (const aNode: TDOMNode; const aDefault: String): String;
class function GetStringW (const aNode: TDOMNode; const aDefault: WideString): WideString;
class function GetStringU (const aNode: TDOMNode; const aDefault: UnicodeString): UnicodeString;
class function GetInt (const aNode: TDOMNode; const aDefault: Int64): Int64;
class function GetFloat (const aNode: TDOMNode; const aDefault: Double): Double;
class function GetBool (const aNode: TDOMNode; const aDefault: Boolean): Boolean;

// try get value of current node
class function TryGetString (const aNode: TDOMNode; out aValue: String): Boolean;
class function TryGetStringW (const aNode: TDOMNode; out aValue: WideString): Boolean;
class function TryGetStringU (const aNode: TDOMNode; out aValue: UnicodeString): Boolean;
class function TryGetInt (const aNode: TDOMNode; out aValue: Int64): Boolean;
class function TryGetFloat (const aNode: TDOMNode; out aValue: Double): Boolean;
class function TryGetBool (const aNode: TDOMNode; out aValue: Boolean): Boolean;

// set value of attribute
class procedure SetAttribString (const aNode: TDOMElement; const aName: DOMString; const aValue: String); overload;
class procedure SetAttribString (const aNode: TDOMElement; const aName: DOMString; const aValue: WideString); overload;
class procedure SetAttribString (const aNode: TDOMElement; const aName: DOMString; const aValue: UnicodeString); overload;
class procedure SetAttribInt (const aNode: TDOMElement; const aName: DOMString; const aValue: Integer); overload;
class procedure SetAttribFloat (const aNode: TDOMElement; const aName: DOMString; const aValue: Double);
class procedure SetAttribBool (const aNode: TDOMElement; const aName: DOMString; const aValue: Boolean);

// get value of attribute
class function GetAttribString (const aNode: TDOMElement; const aName: DOMString; const aDefault: String = ''): String;
class function GetAttribStringW (const aNode: TDOMElement; const aName: DOMString; const aDefault: WideString = ''): WideString;
class function GetAttribStringU (const aNode: TDOMElement; const aName: DOMString; const aDefault: UnicodeString = ''): UnicodeString;
class function GetAttribInt (const aNode: TDOMElement; const aName: DOMString; const aDefault: Int64 = 0): Int64;
class function GetAttribFloat (const aNode: TDOMElement; const aName: DOMString; const aDefault: Double = 0): Double;
class function GetAttribBool (const aNode: TDOMElement; const aName: DOMString; const aDefault: Boolean = false): Boolean;

// get value of attribute
class function TryGetAttribString (const aNode: TDOMElement; const aName: DOMString; out aValue: String): Boolean;
class function TryGetAttribStringW (const aNode: TDOMElement; const aName: DOMString; out aValue: WideString): Boolean;
class function TryGetAttribStringU (const aNode: TDOMElement; const aName: DOMString; out aValue: UnicodeString): Boolean;
class function TryGetAttribInt (const aNode: TDOMElement; const aName: DOMString; out aValue: Int64): Boolean;
class function TryGetAttribFloat (const aNode: TDOMElement; const aName: DOMString; out aValue: Double): Boolean;
class function TryGetAttribBool (const aNode: TDOMElement; const aName: DOMString; out aValue: Boolean): Boolean;

// node operations
class function Nodes (const aElement: TDOMElement; const aName: DOMString = ''): IutlNodeEnumerator;
class function Node (const aElement: TDOMElement; const aName: DOMString; const aCanCreate: Boolean = true): TDOMElement;
class function PrependNode (const aElement: TDOMElement; const aName: DOMString): TDOMElement;
class function AppendNode (const aElement: TDOMElement; const aName: DOMString): TDOMElement;
class procedure PrependText (const aElement: TDOMElement; const aText: DOMString);
class procedure AppendText (const aElement: TDOMElement; const aText: DOMString);
end; end;


implementation implementation
@@ -325,124 +372,148 @@ begin
result := TutlXmlHelper.GetBool(fElement, aDefault); result := TutlXmlHelper.GetBool(fElement, aDefault);
end; end;


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetString(out aValue: String): Boolean;
begin
result := TutlXmlHelper.TryGetString(fElement, aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetStringW(out aValue: WideString): Boolean;
begin
result := TutlXmlHelper.TryGetStringW(fElement, aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetStringU(out aValue: UnicodeString): Boolean;
begin
result := TutlXmlHelper.TryGetStringU(fElement, aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetInt(out aValue: Int64): Boolean;
begin
result := TutlXmlHelper.TryGetInt(fElement, aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetFloat(out aValue: Double): Boolean;
begin
result := TutlXmlHelper.TryGetFloat(fElement, aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetBool(out aValue: Boolean): Boolean;
begin
result := TutlXmlHelper.TryGetBool(fElement, aValue);
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: String); procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: String);
begin begin
fElement.SetAttributeNode(TutlXmlHelper.SetString(
fElement.OwnerDocument.CreateAttribute(aName),
aValue) as TDOMAttr);
TutlXmlHelper.SetAttribString(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: WideString); procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: WideString);
begin begin
fElement.SetAttributeNode(TutlXmlHelper.SetString(
fElement.OwnerDocument.CreateAttribute(aName),
aValue) as TDOMAttr);
TutlXmlHelper.SetAttribString(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: UnicodeString); procedure TutlXmlHelper.SetAttribString(const aName: DOMString; const aValue: UnicodeString);
begin begin
fElement.SetAttributeNode(TutlXmlHelper.SetString(
fElement.OwnerDocument.CreateAttribute(aName),
aValue) as TDOMAttr);
TutlXmlHelper.SetAttribString(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlXmlHelper.SetAttribInt(const aName: DOMString; const aValue: Integer); procedure TutlXmlHelper.SetAttribInt(const aName: DOMString; const aValue: Integer);
begin begin
fElement.SetAttributeNode(TutlXmlHelper.SetInt(
fElement.OwnerDocument.CreateAttribute(aName),
aValue) as TDOMAttr);
TutlXmlHelper.SetAttribInt(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlXmlHelper.SetAttribFloat(const aName: DOMString; const aValue: Double); procedure TutlXmlHelper.SetAttribFloat(const aName: DOMString; const aValue: Double);
begin begin
fElement.SetAttributeNode(TutlXmlHelper.SetFloat(
fElement.OwnerDocument.CreateAttribute(aName),
aValue) as TDOMAttr);
TutlXmlHelper.SetAttribFloat(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TutlXmlHelper.SetAttribBool(const aName: DOMString; const aValue: Boolean); procedure TutlXmlHelper.SetAttribBool(const aName: DOMString; const aValue: Boolean);
begin begin
fElement.SetAttributeNode(TutlXmlHelper.SetBool(
fElement.OwnerDocument.CreateAttribute(aName),
aValue) as TDOMAttr);
TutlXmlHelper.SetAttribBool(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.GetAttribString(const aName: DOMString; const aDefault: String): String; function TutlXmlHelper.GetAttribString(const aName: DOMString; const aDefault: String): String;
begin begin
result := TutlXmlHelper.GetString(fElement.Attributes.GetNamedItem(aName), aDefault);
result := TutlXmlHelper.GetAttribString(fElement, aName, aDefault);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.GetAttribStringW(const aName: DOMString; const aDefault: WideString): WideString; function TutlXmlHelper.GetAttribStringW(const aName: DOMString; const aDefault: WideString): WideString;
begin begin
result := TutlXmlHelper.GetStringW(fElement.Attributes.GetNamedItem(aName), aDefault);
result := TutlXmlHelper.GetAttribStringW(fElement, aName, aDefault);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.GetAttribStringU(const aName: DOMString; const aDefault: UnicodeString): UnicodeString; function TutlXmlHelper.GetAttribStringU(const aName: DOMString; const aDefault: UnicodeString): UnicodeString;
begin begin
result := TutlXmlHelper.GetStringU(fElement.Attributes.GetNamedItem(aName), aDefault);
result := TutlXmlHelper.GetAttribStringU(fElement, aName, aDefault);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.GetAttribInt(const aName: DOMString; const aDefault: Int64): Int64; function TutlXmlHelper.GetAttribInt(const aName: DOMString; const aDefault: Int64): Int64;
begin begin
result := TutlXmlHelper.GetInt(fElement.Attributes.GetNamedItem(aName), aDefault);
result := TutlXmlHelper.GetAttribInt(fElement, aName, aDefault);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.GetAttribFloat(const aName: DOMString; const aDefault: Double): Double; function TutlXmlHelper.GetAttribFloat(const aName: DOMString; const aDefault: Double): Double;
begin begin
result := TutlXmlHelper.GetFloat(fElement.Attributes.GetNamedItem(aName), aDefault);
result := TutlXmlHelper.GetAttribFloat(fElement, aName, aDefault);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.GetAttribBool(const aName: DOMString; const aDefault: Boolean): Boolean; function TutlXmlHelper.GetAttribBool(const aName: DOMString; const aDefault: Boolean): Boolean;
begin begin
result := TutlXmlHelper.GetBool(fElement.Attributes.GetNamedItem(aName), aDefault);
result := TutlXmlHelper.GetAttribBool(fElement, aName, aDefault);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetAttribString(const aName: DOMString; out aValue: String): Boolean; function TutlXmlHelper.TryGetAttribString(const aName: DOMString; out aValue: String): Boolean;
begin begin
result := TutlXmlHelper.TryGetString(fElement.Attributes.GetNamedItem(aName), aValue);
result := TutlXmlHelper.TryGetAttribString(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetAttribStringW(const aName: DOMString; out aValue: WideString): Boolean; function TutlXmlHelper.TryGetAttribStringW(const aName: DOMString; out aValue: WideString): Boolean;
begin begin
result := TutlXmlHelper.TryGetStringW(fElement.Attributes.GetNamedItem(aName), aValue);
result := TutlXmlHelper.TryGetAttribStringW(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetAttribStringU(const aName: DOMString; out aValue: UnicodeString): Boolean; function TutlXmlHelper.TryGetAttribStringU(const aName: DOMString; out aValue: UnicodeString): Boolean;
begin begin
result := TutlXmlHelper.TryGetStringU(fElement.Attributes.GetNamedItem(aName), aValue);
result := TutlXmlHelper.TryGetAttribStringU(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetAttribInt(const aName: DOMString; out aValue: Int64): Boolean; function TutlXmlHelper.TryGetAttribInt(const aName: DOMString; out aValue: Int64): Boolean;
begin begin
result := TutlXmlHelper.TryGetInt(fElement.Attributes.GetNamedItem(aName), aValue);
result := TutlXmlHelper.TryGetAttribInt(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetAttribFloat(const aName: DOMString; out aValue: Double): Boolean; function TutlXmlHelper.TryGetAttribFloat(const aName: DOMString; out aValue: Double): Boolean;
begin begin
result := TutlXmlHelper.TryGetFloat(fElement.Attributes.GetNamedItem(aName), aValue);
result := TutlXmlHelper.TryGetAttribFloat(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.TryGetAttribBool(const aName: DOMString; out aValue: Boolean): Boolean; function TutlXmlHelper.TryGetAttribBool(const aName: DOMString; out aValue: Boolean): Boolean;
begin begin
result := TutlXmlHelper.TryGetBool(fElement.Attributes.GetNamedItem(aName), aValue);
result := TutlXmlHelper.TryGetAttribBool(fElement, aName, aValue);
end; end;


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -451,6 +522,12 @@ begin
result := TutlXmlHelper.Nodes(fElement, aName); result := TutlXmlHelper.Nodes(fElement, aName);
end; end;


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.Node(const aName: DOMString; const aCanCreate: Boolean): TDOMElement;
begin
result := TutlXmlHelper.Node(fElement, aName, aCanCreate);
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlXmlHelper.PrependNode(const aName: DOMString): TDOMElement; function TutlXmlHelper.PrependNode(const aName: DOMString): TDOMElement;
begin begin
@@ -649,12 +726,158 @@ begin
end; end;
end; end;


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class procedure TutlXmlHelper.SetAttribString(const aNode: TDOMElement; const aName: DOMString; const aValue: String);
begin
aNode.SetAttributeNode(TutlXmlHelper.SetString(aNode.OwnerDocument.CreateAttribute(aName), aValue) as TDOMAttr);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class procedure TutlXmlHelper.SetAttribString(const aNode: TDOMElement; const aName: DOMString; const aValue: WideString);
begin
aNode.SetAttributeNode(TutlXmlHelper.SetString(aNode.OwnerDocument.CreateAttribute(aName), aValue) as TDOMAttr);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class procedure TutlXmlHelper.SetAttribString(const aNode: TDOMElement; const aName: DOMString; const aValue: UnicodeString);
begin
aNode.SetAttributeNode(TutlXmlHelper.SetString(aNode.OwnerDocument.CreateAttribute(aName), aValue) as TDOMAttr);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class procedure TutlXmlHelper.SetAttribInt(const aNode: TDOMElement; const aName: DOMString; const aValue: Integer);
begin
aNode.SetAttributeNode(TutlXmlHelper.SetInt(aNode.OwnerDocument.CreateAttribute(aName), aValue) as TDOMAttr);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class procedure TutlXmlHelper.SetAttribFloat(const aNode: TDOMElement; const aName: DOMString; const aValue: Double);
begin
aNode.SetAttributeNode(TutlXmlHelper.SetFloat(aNode.OwnerDocument.CreateAttribute(aName), aValue) as TDOMAttr);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class procedure TutlXmlHelper.SetAttribBool(const aNode: TDOMElement; const aName: DOMString; const aValue: Boolean);
begin
aNode.SetAttributeNode(TutlXmlHelper.SetBool(aNode.OwnerDocument.CreateAttribute(aName), aValue) as TDOMAttr);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.GetAttribString(const aNode: TDOMElement; const aName: DOMString; const aDefault: String): String;
begin
result := TutlXmlHelper.GetString(aNode.Attributes.GetNamedItem(aName), aDefault);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.GetAttribStringW(const aNode: TDOMElement; const aName: DOMString; const aDefault: WideString): WideString;
begin
result := TutlXmlHelper.GetStringW(aNode.Attributes.GetNamedItem(aName), aDefault);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.GetAttribStringU(const aNode: TDOMElement; const aName: DOMString; const aDefault: UnicodeString): UnicodeString;
begin
result := TutlXmlHelper.GetStringU(aNode.Attributes.GetNamedItem(aName), aDefault);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.GetAttribInt(const aNode: TDOMElement; const aName: DOMString; const aDefault: Int64): Int64;
begin
result := TutlXmlHelper.GetInt(aNode.Attributes.GetNamedItem(aName), aDefault);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.GetAttribFloat(const aNode: TDOMElement; const aName: DOMString; const aDefault: Double): Double;
begin
result := TutlXmlHelper.GetFloat(aNode.Attributes.GetNamedItem(aName), aDefault);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.GetAttribBool(const aNode: TDOMElement; const aName: DOMString; const aDefault: Boolean): Boolean;
begin
result := TutlXmlHelper.GetBool(aNode.Attributes.GetNamedItem(aName), aDefault);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.TryGetAttribString(const aNode: TDOMElement; const aName: DOMString; out aValue: String): Boolean;
begin
result := TutlXmlHelper.TryGetString(aNode.Attributes.GetNamedItem(aName), aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.TryGetAttribStringW(const aNode: TDOMElement; const aName: DOMString; out aValue: WideString): Boolean;
begin
result := TutlXmlHelper.TryGetStringW(aNode.Attributes.GetNamedItem(aName), aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.TryGetAttribStringU(const aNode: TDOMElement; const aName: DOMString; out aValue: UnicodeString): Boolean;
begin
result := TutlXmlHelper.TryGetStringU(aNode.Attributes.GetNamedItem(aName), aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.TryGetAttribInt(const aNode: TDOMElement; const aName: DOMString; out aValue: Int64): Boolean;
begin
result := TutlXmlHelper.TryGetInt(aNode.Attributes.GetNamedItem(aName), aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.TryGetAttribFloat(const aNode: TDOMElement; const aName: DOMString; out aValue: Double): Boolean;
begin
result := TutlXmlHelper.TryGetFloat(aNode.Attributes.GetNamedItem(aName), aValue);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.TryGetAttribBool(const aNode: TDOMElement; const aName: DOMString; out aValue: Boolean): Boolean;
begin
result := TutlXmlHelper.TryGetBool(aNode.Attributes.GetNamedItem(aName), aValue);
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.Nodes(const aElement: TDOMElement; const aName: DOMString): IutlNodeEnumerator; class function TutlXmlHelper.Nodes(const aElement: TDOMElement; const aName: DOMString): IutlNodeEnumerator;
begin begin
result := TutlNodeEnumerator.Create(aElement, aName); result := TutlNodeEnumerator.Create(aElement, aName);
end; end;


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.Node(const aElement: TDOMElement; const aName: DOMString; const aCanCreate: Boolean): TDOMElement;
var
sl: TStringList;
s: String;
b: Boolean;
i, c: Integer;
begin
sl := TStringList.Create;
try
sl.Delimiter := '.';
sl.DelimitedText := String(aName);
result := aElement;
for s in sl do begin
if (s = '') then
continue;
if not Assigned(result) then
exit;
b := false;
c := result.ChildNodes.Count;
for i := 0 to c-1 do begin
if (result.ChildNodes[i].NodeName = DOMString(s)) then begin
result := TDOMElement(result.ChildNodes[i]);
b := true;
break;
end;
end;
if not b then begin
if aCanCreate
then result := AppendNode(result, DOMString(s))
else result := nil;
end;
end;
finally
FreeAndNil(sl);
end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class function TutlXmlHelper.PrependNode(const aElement: TDOMElement; const aName: DOMString): TDOMElement; class function TutlXmlHelper.PrependNode(const aElement: TDOMElement; const aName: DOMString): TDOMElement;
begin begin


Načítá se…
Zrušit
Uložit