Aggiunta di dipendenze ai dati Configuration-Dependent
Le direttive *Switch/*Case rendono i dati dipendenti dai parametri definiti usando le direttive *Feature/*Option . Il tag costrutto del costrutto *Switch assegna uno dei parametri definiti in un costrutto *Feature . Il riferimento di un parametro tramite il tag costrutto del costrutto *Switch potrebbe precederne la definizione tramite il costrutto *Feature .
Il corpo di un costrutto *Switch contiene un numero di costrutti *Case e un costrutto *predefinito facoltativo. Nessun'altra voce figlio può essere visualizzata all'interno del costrutto *Switch . Il tag costrutto del costrutto *Case assegna uno dei valori consentiti definiti in un costrutto *Option che corrisponde al parametro denominato nel costrutto *Switch . Il tag costrutto non viene usato per il costrutto*predefinito .
* I costrutti switch possono essere visualizzati come voci figlio all'interno di qualsiasi altro costrutto, ad eccezione del fatto che un costrutto *Switch non può essere figlio di un altro costrutto *Switch . Il corpo di un costrutto *Case può contenere qualsiasi voce GDL, ad eccezione del costrutto *Case non può essere il predecessore di un costrutto *Feature o *Default .
Le direttive *Switch/*Case funzionano in modo molto simile ai costrutti del linguaggio C con lo stesso nome. Il contenuto di qualsiasi costrutto *Case (il cui tag costrutto è denominato nella configurazione come valore o stato corrente del parametro denominato dal costrutto *Switch ) può essere visualizzato nello snapshot. In caso contrario, il parser impedisce la visualizzazione delle voci contenute nel costrutto *Case nello snapshot.
Nota A differenza della versione C di *Switch/*Case, GDL non richiede un'istruzione di interruzione per interrompere l'esecuzione dal continuare oltre la fine del costrutto *Case .
Se il corpo di un costrutto *Case viene omesso ,ovvero *Case viene visualizzato come attributo anziché come costrutto), verrà usato il corpo del successivo costrutto *Case o *Default . Questo comportamento è di nuovo simile al comportamento nel caso switchcase del linguaggio / C. Se il costrutto *predefinito è presente, deve essere visualizzato per ultimo, dopo tutte le voci *Case .
Se il parametro consente PICKMANY, il contenuto di più costrutti *Case può essere visualizzato nello snapshot. Questa situazione può portare a più definizioni dello stesso costrutto o attributo. Tali definizioni vengono gestite esattamente come se vengano visualizzate in modo esplicito nel file GDL all'esterno di qualsiasi costrutto *Switch/*Case . Se diversi costrutti *Case condividono lo stesso corpo e più di uno viene denominato nella configurazione, il contenuto del corpo verrà visualizzato una sola volta.
Se nessuno dei costrutti *Case è denominato nella configurazione, viene usato il contenuto del costrutto *predefinito . Se non viene definito alcun costrutto *predefinito , l'intero costrutto *Switch/*Case e tutte le relative voci discendenti vengono escluse dallo snapshot.
Se vengono definiti più costrutti di pari livello *Switch/*Case , ognuno viene valutato indipendentemente dall'altro. L'unione di costrutti di pari livello non si applica ai costrutti *Switch/*Case .
Le direttive *Switch e *Construct non vengono mai visualizzate nello snapshot, quindi nello snapshot le voci figlio del costrutto *Casevengono visualizzate come voci figlio del padre del costrutto *Switch .
Nell'esempio di codice seguente viene definito un parametro Today per richiedere giorni della settimana. L'esempio mostra due costrutti *Switch/*Case di pari livello. Entrambi verranno valutati in modo indipendente.
*Schedule:
{
*Switch: Today
{
*Case: Saturday
*Case: Sunday
{
*Eat: Breakfast, Dinner
}
*Case: Monday
*Case: Wednesday
*Case: Friday
{
*Eat: Lunch
}
}
*Switch: Today
{
*Case: Sunday
{
*ToDo: Laundry
}
*Case: Saturday
{
*ToDo: Ballgame
}
*Default:
{
*ToDo: FixBugs
}
}
}
Se la configurazione specifica Today: Saturday
, lo snapshot conterrà il codice seguente.
*Schedule:
{
*Eat: Breakfast, Dinner
*ToDo: Ballgame
}
Se la configurazione specifica Today: Wednesday
, lo snapshot conterrà il codice seguente.
*Schedule:
{
*Eat: Lunch
*ToDo: FixBugs
}
Se la configurazione specifica Today: Tuesday
, lo snapshot conterrà il codice seguente.
*Schedule:
{
*ToDo: FixBugs
}
L'esempio di codice seguente mostra due costrutti *Switch/*Case annidati.
*Schedule:
{
*Switch: Today
{
*Case: Sunday
{
*Switch: Weather
{
*Case: Sunny
{
*ToDo: Garden
}
*Case: Cloudy
{
*ToDo: Laundry
}
}
}
*Case: Saturday
{
*ToDo: Ballgame
}
*Default:
{
*ToDo: FixBugs
}
}
}