Advertisement
Guest User

ListaCed

a guest
Jun 28th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.04 KB | None | 0 0
  1. LIS_tpCondRet LIS_VerificarLista( void * pListaParm )
  2.    {
  3.  
  4.       LIS_tpLista * pLista = NULL ;
  5.  
  6.       if ( LIS_VerificarCabeca( pListaParm ) != LIS_CondRetOK )
  7.       {
  8.          return LIS_CondRetErroEstrutura ;
  9.       } /* if */
  10.  
  11.       CED_MarcarEspacoAtivo( pListaParm ) ;
  12.  
  13.       pLista = ( LIS_tpLista * ) ( pListaParm ) ;
  14.  
  15.       return VerificarNo( pLista->pOrigemLista ) ;
  16.  
  17.    } /* Fim função: LIS  &Verificar uma lista */
  18.  
  19. #endif
  20.  
  21. #ifdef _DEBUG
  22.  
  23. /***************************************************************************
  24. *
  25. *  Função: LIS  &Verificar um nó cabeça
  26. *  ****/
  27.  
  28.    LIS_tpCondRet LIS_VerificarCabeca( void * pCabecaParm )
  29.    {
  30.  
  31.       LIS_tpLista * pLista = NULL ;
  32.          
  33.       /* Verifica o tipo do espaço */
  34.  
  35.          if ( pCabecaParm == NULL )
  36.          {
  37.             TST_NotificarFalha( "Tentou verificar cabeça inexistente." ) ;
  38.             return LIS_CondRetErroEstrutura ;
  39.          } /* if */
  40.  
  41.          if ( ! CED_VerificarEspaco( pCabecaParm , NULL ))
  42.          {
  43.             TST_NotificarFalha( "Controle do espaço acusou erro." ) ;
  44.             return LIS_CondRetErroEstrutura ;
  45.          } /* if */
  46.  
  47.          if ( TST_CompararInt( LIS_TipoEspacoCabeca ,
  48.               CED_ObterTipoEspaco( pCabecaParm ) ,
  49.               "Tipo do espaço de dados não é cabeça de lista." ) != TST_CondRetOK )
  50.          {
  51.             return LIS_CondRetErroEstrutura ;
  52.          } /* if */
  53.  
  54.          pLista = ( LIS_tpLista * )( pCabecaParm ) ;
  55.  
  56.       /* Verifica origem da lista */
  57.  
  58.          if ( pLista->pOrigemLista != NULL )
  59.          {
  60.             if ( TST_CompararPonteiro( pCabecaParm , pLista->pOrigemLista->pCabeca ,
  61.                  "Nó raiz não aponta para cabeça." ) != TST_CondRetOK )
  62.             {
  63.                return LIS_CondRetErroEstrutura ;
  64.             } /* if */
  65.          } else {
  66.             if ( TST_CompararPonteiro( NULL , pLista->pElemCorr ,
  67.                  "Lista vazia tem nó corrente não NULL." ) != TST_CondRetOK )
  68.             {
  69.                return LIS_CondRetErroEstrutura ;
  70.             } /* if */
  71.          } /* if */
  72.  
  73.       /* Verifica corrente */
  74.  
  75.          if ( pLista->pElemCorr != NULL )
  76.          {
  77.             if ( TST_CompararPonteiro( pCabecaParm , pLista->pElemCorr->pCabeca ,
  78.                  "Nó corrente não aponta para cabeça." ) != TST_CondRetOK )
  79.             {
  80.                return LIS_CondRetErroEstrutura ;
  81.             } /* if */
  82.          } else {
  83.             if ( TST_CompararPonteiro( NULL , pLista->pOrigemLista ,
  84.                  "Lista não vazia tem nó corrente NULL." ) != TST_CondRetOK )
  85.             {
  86.                return LIS_CondRetErroEstrutura ;
  87.             } /* if */
  88.          } /* if */
  89.  
  90.       return LIS_CondRetOK ;
  91.  
  92.    } /* Fim função: LIS  &Verificar um nó cabeça */
  93.  
  94. #endif
  95.  
  96. #ifdef _DEBUG
  97.  
  98. /***************************************************************************
  99. *
  100. *  Função: LIS  &Verificar um nó de estrutura
  101. *  ****/
  102.  
  103.    LIS_tpCondRet LIS_VerificarNo( void * pNoParm )
  104.    {
  105.  
  106.       tpElemLista * pNo     = NULL ;
  107.       LIS_tpLista   * pLista = NULL ;
  108.  
  109.       /* Verificar se é nó estrutural */
  110.  
  111.          if ( pNoParm == NULL )
  112.          {
  113.             TST_NotificarFalha( "Tentou verificar nó inexistente." ) ;
  114.             return LIS_CondRetErroEstrutura ;
  115.  
  116.          } /* if */
  117.  
  118.          if ( ! CED_VerificarEspaco( pNoParm , NULL ))
  119.          {
  120.             TST_NotificarFalha( "Controle do espaço acusou erro." ) ;
  121.             return LIS_CondRetErroEstrutura ;
  122.          } /* if */
  123.  
  124.          if ( TST_CompararInt( LIS_TipoEspacoNo ,
  125.               CED_ObterTipoEspaco( pNoParm ) ,
  126.               "Tipo do espaço de dados não é nó de lista." ) != TST_CondRetOK )
  127.          {
  128.             return LIS_CondRetErroEstrutura ;
  129.          } /* if */
  130.  
  131.          pNo     = ( tpElemLista * )( pNoParm ) ;
  132.          pLista = pNo->pCabeca ;
  133.  
  134.       /* Verificar cabeça */
  135.  
  136.          if ( pLista->pOrigemLista != NULL  )
  137.          {
  138.             if ( TST_CompararPonteiro( pLista , pLista->pOrigemLista->pCabeca ,
  139.                  "Nó não pertence à lista." ) != TST_CondRetOK )
  140.             {
  141.                return LIS_CondRetErroEstrutura ;
  142.             } /* if */
  143.          } else
  144.          {
  145.             return TST_NotificarFalha( "Nó pertence a lista vazia." ) ;
  146.          } /* if */
  147.  
  148.       /* Verificar antecessor */
  149.  
  150.          if ( pNo->pAnt != NULL )
  151.          {
  152.             if (pNo->pAnt->pProx != pNo )
  153.             {
  154.                return LIS_CondRetErroEstrutura ;
  155.             } /* if */
  156.          } else
  157.          {
  158.             if ( TST_CompararPonteiro( pNo , pLista->pOrigemLista ,
  159.                  "Primeiro nó da lista não é apontado por pOrigemLista." ) != TST_CondRetOK )
  160.             {
  161.                return LIS_CondRetErroEstrutura ;
  162.             } /* if */
  163.          } /* if */
  164.  
  165.       /* Verificar sucessor */
  166.  
  167.          if ( pNo->pProx != NULL )
  168.          {
  169.             if ( pNo->pProx->pAnt != pNo )
  170.             {
  171.                return LIS_CondRetErroEstrutura ;
  172.             } /* if */
  173.          } else
  174.          {
  175.             if ( TST_CompararPonteiro( pNo , pLista->pFimLista ,
  176.                  "Último nó da lista não é apontado por pFimLista." ) != TST_CondRetOK )
  177.             {
  178.                return LIS_CondRetErroEstrutura ;
  179.             } /* if */
  180.          } /* if */
  181.  
  182.       return LIS_CondRetOK ;
  183.  
  184.    } /* Fim função: LIS  &Verificar um nó de estrutura */
  185.  
  186. #endif
  187.  
  188. #ifdef _DEBUG
  189.  
  190. /***************************************************************************
  191. *
  192. *  Função: LIS  &Deturpar lista
  193. *  ****/
  194.  
  195.    void LIS_Deturpar( void * pListaParm ,
  196.                       LIS_tpModosDeturpacao ModoDeturpar )
  197.    {
  198.  
  199.       LIS_tpLista * pLista = NULL ;
  200.  
  201.       if ( pListaParm == NULL )
  202.       {
  203.          return ;
  204.       } /* if */
  205.  
  206.       pLista = ( LIS_tpLista * )( pListaParm ) ;
  207.  
  208.       switch ( ModoDeturpar ) {
  209.  
  210.       /* Modifica o tipo da cabeça */
  211.  
  212.          case DeturpaTipoCabeca :
  213.          {
  214.  
  215.             CED_DefinirTipoEspaco( pLista , CED_ID_TIPO_VALOR_NULO ) ;
  216.  
  217.             break ;
  218.  
  219.          } /* fim ativa: Modifica o tipo da cabeça */
  220.  
  221.       /* Deturpa nó */
  222.  
  223.          default :
  224.  
  225.          if ( pLista->pElemCorr != NULL )
  226.          {
  227.  
  228.             switch ( ModoDeturpar ) {
  229.  
  230.             /* Modifica tipo nó corrente */
  231.  
  232.             /* Anula ponteiro do elemento anterior */
  233.  
  234.                case DeturpaPtAntNulo :
  235.                {
  236.  
  237.                   pLista->pElemCorr->pAnt = NULL ;
  238.  
  239.                   break ;
  240.  
  241.                } /* fim ativa: Anula ponteiro do elemento anterior */
  242.  
  243.             /* Anula ponteiro do elemento posterior  */
  244.  
  245.                case DeturpaPtProxNulo :
  246.                {
  247.  
  248.                   pLista->pElemCorr->pProx = NULL ;
  249.  
  250.                   break ;
  251.  
  252.                } /* fim ativa: Anula ponteiro do elemento posterior */
  253.  
  254.             } /* fim seleciona: Deturpa nó */
  255.  
  256.             break ;
  257.  
  258.          } /* fim ativa: Deturpa nó */
  259.  
  260.       } /* fim seleciona: Raiz de LIS  &Deturpar lista */
  261.  
  262.    } /* Fim função: LIS  &Deturpar lista */
  263.  
  264. #endif
  265.  
  266.  
  267. /*=======
  268. *  $FC Função: LIS  -Explorar verificando os nós de uma lista
  269. *
  270. *  $ED Descrição da função
  271. *     Percorre recursivamente a lista verificando os nós à medida que forem
  272. *     visitados. Caso seja encontrado alguma falha, a verificação será
  273. *     suspensa. Portanto, no caso de falha, é possível que nem todos
  274. *     os nós da lista sejam visitados.
  275. *
  276. ***********************************************************************/
  277.  
  278.    LIS_tpCondRet VerificarNo( tpElemLista * pNo )
  279.    {
  280.  
  281.       LIS_tpCondRet CondErro = LIS_CondRetOK ;
  282.  
  283.       if ( pNo == NULL )
  284.       {
  285.          return LIS_CondRetOK ;
  286.       } /* if */
  287.  
  288.       CED_MarcarEspacoAtivo( pNo ) ;
  289.  
  290.       CondErro = LIS_VerificarNo( pNo ) ;
  291.  
  292.       if ( CondErro == LIS_CondRetOK )
  293.       {
  294.          CondErro = VerificarNo( pNo->pProx ) ;
  295.       } /* if */
  296.  
  297.       return CondErro ;
  298.  
  299.    } /* Fim função: LIS  -Explorar verificando os nós de uma lista */
  300.  
  301. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement