hp2FEM  0.1
include/acdp/aclist.h
00001 #ifndef ACLIST_H
00002 #define ACLIST_H
00003 
00004 #include "acdp.h"
00005 
00006 /*
00007  ** definicao de uma lista generica - Salgado - 08/93
00008  ** esta lista pode ser acessada livremente
00009  */
00010 
00011 /*
00012  ** Os metodos da classe estao no arquivo acList.CPP
00013  */
00014 
00015 typedef int  (*fcmp) (void *, void *);   // funcao de comparacao
00016 typedef void (*fprt) (FILE *, void *);   // funcao de impressao
00017 
00018 /*
00019  ** definicao de uma estrutura para representar o no' da lista generica
00020  ** Obs.: Tudo e' publico no no' da lista.
00021  **       E' responsabilidade do usuario usar corretamente.
00022  */
00023 
00024 class acNodeList
00025 {
00026 public:
00027         void *GetDados()
00028         {
00029                 if (this)
00030                         return(dados);
00031                 else
00032                         return(0);
00033         }
00034 
00035         /*
00036          ** Este pointer permite andar livremente pela lista.
00037          ** Por este motivo, deve ser usado com cuidado.
00038          */
00039         acNodeList *next;    // pointer para o proximo no'
00040         void *dados;        // pointer para os dados
00041 };
00042 
00043 class acList
00044 {
00045 protected:           // para poder ter herdeiros
00046         acNodeList *head;         // inicio da lista
00047         int        sizedados;     // numero de bytes dos dados
00048         int        sizelist;      // tamanho da lista (num. de nos)
00049         fcmp       cmp;           // funcao de comparacao
00050         fprt       prt;           // funcao de impressao
00051         void       errorcmp();    // erro de comparacao
00052         void       erroralloc();  // erro de alocacao
00053         void       errorinit();   // erro de inicializacao
00054         void       errorprt();    // erro de impressao
00055 
00056 public:
00057 
00058         /********************************************
00059          * Construtor e destrutor da lista generica *
00060          ********************************************/
00061 
00062         /*
00063          ** Construtor
00064          **
00065          ** Formas de uso:
00066          **
00067          **  acList lista(sizeof(tipo));
00068          **      Cria lista e armazena tamanho dos dados.
00069          **      Nao sera' permitida a insercao ordenada ou
00070          **      pesquisa.
00071          **
00072          **  acList lista(sizeof(tipo), func_comp);
00073          **      Cria lista e armazena tamanho dos dados e
00074          **      a funcao de comparacao para pesquisa
00075          **      e insercao ordenada.
00076          **
00077          ** acList lista(sizeof(tipo), func_comp, func_prt);
00078          **      Cria lista e armazena tamanho dos dados e
00079          **      funcoes de comparacao e impressao.
00080          **
00081          ** acList lista(sizeof(tipo), func_prt);
00082          **      Cria lista e armazena tamanho dos dados e
00083          **      funcao de impressao.
00084          */
00085         acList(int s)
00086         {
00087                 head = 0;
00088                 sizedados = s;
00089                 cmp = 0;
00090                 prt = 0;
00091                 sizelist = 0;
00092         }
00093 
00094         acList(int s, fcmp c)
00095         {
00096                 head = 0;
00097                 sizedados = s;
00098                 cmp = c;
00099                 prt = 0;
00100                 sizelist = 0;
00101         }
00102 
00103         acList(int s, fcmp c, fprt p)
00104         {
00105                 head = 0;
00106                 sizedados = s;
00107                 cmp = c;
00108                 prt = p;
00109                 sizelist = 0;
00110         }
00111 
00112         acList(int s, fprt p)
00113         {
00114                 head = 0;
00115                 sizedados = s;
00116                 cmp = 0;
00117                 prt = p;
00118                 sizelist = 0;
00119         }
00120 
00121         /*
00122          ** construtor sem parametros
00123          */
00124          acList()
00125          {
00126                 head = 0;
00127                 sizedados = 0;
00128                 cmp = 0;
00129                 prt = 0;
00130                 sizelist = 0;
00131          }
00132 
00133         /*
00134          ** Destrutor
00135          **
00136          ** Deleta os elementos da lista
00137          */
00138          ~acList()
00139         {
00140                 Clear();
00141         }
00142 
00143 
00144         /***************************************
00145          * Funcoes para inserir dados na lista *
00146          ***************************************/
00147 
00148          /*
00149           ** Funcao para inserir um no' sempre no inicio da lista.
00150           ** Deve-se passar um pointer para os dados a serem inseridos.
00151           ** 1 -> ok
00152           ** 0 -> erro
00153           */
00154          int InsertFirst(void *a);
00155 
00156          /*
00157           ** funcao para inserir um no' em uma lista ordenada.
00158           ** Deve-se passar um pointer para os dados a serem inseridos.
00159           ** Se inseriu o no' retorna 1.
00160           ** Se retornar 0 e porque tentou inserir um dado ja' existente.
00161           ** -1 -> erro
00162           */
00163          int InsertSort(void *d);
00164 
00165          /*
00166           ** Funcao para deletar ou inserir um no'
00167           ** Se o no' nao existe, insere e retorna 1
00168           ** Se o no' existe, deleta e retorna 0
00169           ** -1 -> erro
00170           */
00171          int InsDelSort(void *d);
00172 
00173 
00174          /*************************************
00175           * Funcoes para deletar nos da lista *
00176           *************************************/
00177 
00178          /*
00179           ** Deleta o primeiro no' de uma lista qualquer
00180           */
00181          void DelFirst();
00182 
00183          /*
00184           ** Deleta um no' de uma lista qualquer.
00185           ** Se deletou, retorna 1 e em caso contrario retorna 0
00186           ** -1 -> erro
00187           */
00188          int DelNode(void *d);
00189 
00190          /*
00191           ** Deleta um no' de uma lista ordenada.
00192           ** Se deletou, retorna 1 e em caso contrario retorna 0
00193           ** -1 -> erro
00194           */
00195          int DelNodeSort(void *d);
00196 
00197 
00198          /********************************
00199           * Funcoes de pesquisa na lista *
00200           ********************************/
00201 
00202          /*
00203           ** Pesquisa sequencial em qualquer lista.
00204           ** Se achou retorna pointer para o no' e em
00205           ** caso contrario 0.
00206           */
00207          void *SearchSeq(void *d);
00208 
00209          /*
00210           ** Pesquisa sequencial em lista ordenada.
00211           ** Se achou retorna pointer para o no' e em
00212           ** caso contrario 0.
00213           */
00214          void *SearchSort(void *d);
00215 
00216          /*
00217           ** Retorna um pointer para o primeiro no' de uma
00218           ** lista qualquer.
00219           */
00220          void *GetFirst()
00221          {
00222                  if (head)
00223                          return(head->dados);
00224                  else
00225                          return(0);
00226          }
00227 
00228 
00229          /**********************
00230           * Funcoes auxiliares *
00231           **********************/
00232 
00233 
00234          /*
00235           ** Funcao para limpar uma lista
00236           */
00237          void Clear();
00238 
00239 
00240          /*
00241           ** Retorna o numero de nos de uma lista
00242           */
00243          int GetSize()
00244          {
00245                  return sizelist;
00246          }
00247 
00248          /*
00249           ** retorna inicio da lista
00250           */
00251          acNodeList *GetHead()
00252          {
00253                  return(head);
00254          }
00255 
00256          /*
00257           ** Funcao para inicializar lista sem parametros
00258           */
00259          void SetListData(int s)
00260          {
00261                  head = 0;
00262                  sizedados = s;
00263                  cmp = 0;
00264                  prt = 0;
00265                  sizelist = 0;
00266          }
00267 
00268          void SetListData(int s, fcmp c)
00269          {
00270                  head = 0;
00271                  sizedados = s;
00272                  cmp = c;
00273                  prt = 0;
00274                  sizelist = 0;
00275          }
00276 
00277          void SetListData(int s, fcmp c, fprt p)
00278          {
00279                  head = 0;
00280                  sizedados = s;
00281                  cmp = c;
00282                  prt = p;
00283                  sizelist = 0;
00284          }
00285 
00286          void SetListData(int s, fprt p)
00287          {
00288                  head = 0;
00289                  sizedados = s;
00290                  cmp = 0;
00291                  prt = p;
00292                  sizelist = 0;
00293          }
00294 
00295          void SetCmpFunc(fcmp c)
00296          {
00297                  cmp = c;
00298          }
00299 
00300          /*
00301           ** funcao para imprimir lista em arquivo
00302           */
00303           int Print(FILE *fp);
00304 
00305          /*
00306           ** funcao para verificar existencia de lista
00307           */
00308           int Exist()
00309          {
00310                  return(sizedados != 0);
00311          }
00312 
00313 };
00314 
00315 #endif // ACLIST_H
 All Classes Files Functions Variables Typedefs Friends Defines