80 lines
3.8 KiB
Text
80 lines
3.8 KiB
Text
//***************************************************************************//
|
|
// Pool támogató szekciót generál egy osztályhoz //
|
|
//***************************************************************************//
|
|
template GeneratePoolableSection(classname, ismasterentity, customname)
|
|
#region Pool-lal kapcsolatos műveletek
|
|
|
|
private static readonly PoolableFactory m_Factory = new [classname]Factory();
|
|
private static readonly ObjectPool m_Pool = new ObjectPool(m_Factory);
|
|
protected override PoolableFactory GetFactory() { return m_Factory; }
|
|
protected override ObjectPool GetPool() { return m_Pool; }
|
|
|
|
private sealed class [classname]Factory : PoolableFactory
|
|
{
|
|
public Poolable CreateObject() { return new [customname](); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Visszaad egy alapállapotú [classname] entitáspéldányt, lehetőleg pool-ból.
|
|
/// </summary>
|
|
/// <returns>Egy alapállapotú [classname] példány.</returns>
|
|
[if ([ismasterentity] == "true")]
|
|
public static [classname] GiveAnInstance()
|
|
[else]
|
|
public static new [classname] GiveAnInstance()
|
|
[end if]
|
|
{
|
|
[classname] result = ([classname])m_Factory.CreateObject();
|
|
result.Reset();
|
|
return result;
|
|
}
|
|
|
|
#endregion
|
|
end template
|
|
|
|
|
|
//***************************************************************************//
|
|
// Legenerálja egy entitás Reset() metódusát //
|
|
//***************************************************************************//
|
|
template GenerateEntityReset(MClass)
|
|
#region Alaphelyzetbe állítás
|
|
protected override void Reset()
|
|
{
|
|
base.Reset();
|
|
|
|
// alaphelyzetbe állítjuk az egyszerű mezőket
|
|
[loop (MClass -> MAttribute where [MAttribute.name] != [MClass.name])]
|
|
this.m_[MAttribute.name] = [GetCSharpDefaultValueOfAttribute([MAttribute])];
|
|
[end loop]
|
|
|
|
// alaphelyzetbe állítjuk az asszociációkból származó mezőket
|
|
[loop (MClass -> MAssociation as CurrentAssoc-> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass])=="Entity") )]
|
|
[loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id]<[EndRole.id] and GetStereoType([EndClass]) == "Entity" ))]
|
|
this.m_[ConvertRoleToName([StartRole])] = [GetCSharpDefaultValueOfType("ID")]; // ID
|
|
this.m_[ConvertRoleToName([EndRole])] = [GetCSharpDefaultValueOfType("ID")]; // ID
|
|
[end loop]
|
|
[end loop]
|
|
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
|
|
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([EndRole])))]
|
|
[if (HasAssociationClass([CurrentAssoc]) == "")]
|
|
[//if (([EndRole.multiplicity] == "1") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
|
|
[if (([EndRole.multiplicity] == "1") or ([EndRole.multiplicity] == "0..1"))]
|
|
this.m_[ConvertRoleToName([EndRole])] = [GetCSharpDefaultValueOfType("ID")];
|
|
this.m_[DefineRoleName([EndRole])] = null; // Entity
|
|
[end if]
|
|
[if ([EndRole.multiplicity] == "*" or [EndRole.multiplicity] == "1..*" or [EndRole.multiplicity] == "0..*")]
|
|
this.m_[DefineRoleName([EndRole])] = null; // EntityCollection
|
|
[end if]
|
|
[else]
|
|
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
|
|
[end if]
|
|
[if ([EndRole.multiplicity] == "*" or [EndRole.multiplicity] == "1..*" or [EndRole.multiplicity] == "0..*")]
|
|
[end if]
|
|
[end if]
|
|
[end if]
|
|
[end loop]
|
|
}
|
|
|
|
#endregion
|
|
end template
|
|
|