//AttrList : attrlist.h
#ifndef LISTC_H
#include "listc.h"
#endif
#ifndef ATTR_H
#include "attr.h"
#endif
#ifndef ATTRLIST_H
#define ATTRLIST_H
/* Lista di attributi: eredita sia da list che da Attributo
 * Serve per costruire una lista di richieste da confrontare
 * con gli attributi di un capo.
 * Per ognio attributo si puo' richiedere che sia uguale,
 * minore e uguale o maggiore e uguale del valore dato.
 * L'attributo del capo viene confrontato con ognuna delle
 * condizioni e se nessun confronto fallisce, allora
 * il capo e' accettato.
 * Per questo motivo, se confronto un attributo con uno di
 * un tipo diverso (confronto d non eseguire), il confronto
 * deve aver successo, per non bloccare la ricerca.
 */
class AttrList : public list<AttrList>, public Attributo
{
public :
  enum modo { le, eq, ge } conf;  // tipi di confronto
  /* Costruttore. 'l' e' la lista a cui appendere, 'c' il tipo
   * di confronto, 't' il tipo di attributo e 'valore' il valore di riferimento.
   * Vengono chiamati i costruttori con parametri per 'list'
   * e 'Attributo'. */
  AttrList (TPtr &l, modo c, tipo_t t, char *valore) :
    list<AttrList> (l), Attributo (t, valore) { conf = c; }; // Usa la versione generata del costruttore
  int operator == (const Attributo &a);  // Operatore di confronto ricorsiva
};

#endif