>LOCAL dPot AS System.Func<Prop, List<Prop> > >dPot := ; > { p AS Prop => > VAR Potentials := List<Prop>{} > VAR pcs := 0 > Potentials:Add(p) > LOCAL oP AS Prop > REPEAT > oP := Prop{p:Name, p:Quantity, p:Price}{Pieces := ++pcs} > Potentials:Add(oP) > UNTIL Prop.Qualify(oP:Constraint()) > RETURN Potentials > } >VAR oPot1 := dPot(oP1) >VAR oPot2 := dPot(oP2) >VAR oPot3 := dPot(oP3) > >VAR oSol := (FROM p1 IN oPot1 ; > JOIN p2 IN oPot2 ON TRUE EQUALS TRUE ; > JOIN p3 IN oPot3 ON TRUE EQUALS TRUE ; > WHERE Prop.Qualify(p1:Constraint() + p2:Constraint() + p3:Constraint()) ; > ORDERBY (p1:Minimize() + p2:Minimize() + p3:Minimize()) ; > SELECT <INT>{p1:Pieces, p2:Pieces, p3:Pieces}):Take(3) >>
>CLASS ArrayServer INHERIT DataServer > /* The following IVars inherit from DataServer: > aClients // Array with all Notify-Clients > aDataFields // Array with DataField object for each column > nCCMode // Concurrency mode > nLastLock // ??? > oHLStatus // HyperLabel identifying the status after the last operation > oHyperLabel // HyperLabel of the Server > wFieldCount // Number of columns > */ > PROTECT _aData AS ARRAY // Two dimensional Array with the data > PROTECT _wRecNo AS WORD // Current row > PROTECT _wLastRec AS WORD // Number of rows > PROTECT _aDeleted AS ARRAY // Deleted flags for _aData > PROTECT _lEoF AS LOGIC // EoF flag > PROTECT _lBoF AS LOGIC // BoF flag > PROTECT _aRecord AS ARRAY // Buffer for the current record > PROTECT _lSetDeleted AS LOGIC // SetDeleted() state for this server > PROTECT _aNewRec AS ARRAY // Default values for new records > > // We emulate the DbServer class, so add these also to the class > PROTECT aStruct AS ARRAY > PROTECT siSuspendNotification AS SHORT > > /* I think the following Messages are automatically handled by DataServer, > because we use the inherited PROTECT intance variables, particularly > aDataFields. > > PROPERTIES > ConcurrencyControl Access/Assign > FCount Access > HyperLabel Access/Assign > Name Access > NameSym Access > > METHODS > AsString > DataField > Commit > FieldHyperLabel > FieldName > FieldPos > FieldSpec > FieldStatus > FieldValidate > NoIvarGet > NoIvarPut > RegisterClient > UnregisterClient > */ > METHOD Append() CLASS ArrayServer > ACCESS DBStruct CLASS ArrayServer > METHOD Close() CLASS ArrayServer > METHOD Commit() CLASS ArrayServer > ACCESS Data() CLASS ArrayServer > METHOD DefaultValue( uFieldID ) CLASS ArrayServer > ACCESS BoF CLASS ArrayServer > METHOD Delete() CLASS ArrayServer > ACCESS Deleted CLASS ArrayServer > ACCESS EoF CLASS ArrayServer > METHOD FIELDGET( uFieldID ) CLASS ArrayServer > METHOD FieldGetFormatted( uFieldID ) CLASS ArrayServer > ACCESS LASTREC() CLASS ArrayServer > METHOD Notify( kNotifyName, uDescription ) CLASS ArrayServer > METHOD Recall() CLASS ArrayServer > METHOD RecallAll() CLASS ArrayServer > ACCESS RecCount CLASS ArrayServer > ACCESS RecNo CLASS ArrayServer > ASSIGN RECNO( nNewRec ) CLASS ArrayServer > METHOD Refresh() CLASS ArrayServer > METHOD ResetNotification() CLASS ArrayServer > ASSIGN SetDeleted( lDeleted ) CLASS ArrayServer > METHOD Skip( nSkip ) CLASS ArrayServer > METHOD SuspendNotification() CLASS ArrayServer > DEFINE MAX_ARRAY := 65535 > METHOD FieldPos( uFieldID ) CLASS ArrayServer > METHOD FIELDPUT( uFieldID, uValue ) CLASS ArrayServer > METHOD GoBottom() CLASS ArrayServer > METHOD GoTo( nNewRec ) CLASS ArrayServer > METHOD GoTop() CLASS ArrayServer > METHOD Init( aArrayStruct, aDataArray ) CLASS ArrayServer >END CLASS >>