Ignore:
Timestamp:
Jan 16, 2017, 9:48:18 AM (7 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
16e290ed6ed9a361fef149bc33d0b55909b2273e
Parents:
2094fad4a01ad43e18993abc6366ff6b1ddb4fed5a1c7862e21daad552fae4eb1c7ac09cf3209280
git-author:
Hans Schoenemann <hannes@mathematik.uni-kl.de>2017-01-16 09:48:18+01:00
git-committer:
GitHub <noreply@github.com>2017-01-16 09:48:18+01:00
Message:
Merge pull request #812 from YueRen/cddDeinitialize

fix: proper deinitialization of cddlib global variables
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/dyn_modules/gfanlib/bbpolytope.cc

    r2094fa r8ed7dc  
    185185BOOLEAN polytopeViaVertices(leftv res, leftv args)
    186186{
    187   gfan::initializeCddlibIfRequired();
    188187  leftv u = args;
    189188  if ((u != NULL) && ((u->Typ() == BIGINTMAT_CMD) || (u->Typ() == INTMAT_CMD)))
    190189  {
    191     if (u->next == NULL) return ppCONERAYS1(res, u);
     190    if (u->next == NULL)
     191    {
     192      gfan::initializeCddlibIfRequired();
     193      BOOLEAN bo = ppCONERAYS1(res, u);
     194      gfan::deinitializeCddlibIfRequired();
     195      return bo;
     196    }
    192197    leftv v = u->next;
    193198    if ((v != NULL) && (v->Typ() == INT_CMD))
    194199    {
    195       if (v->next == NULL) return ppCONERAYS3(res, u, v);
     200      if (v->next == NULL)
     201      {
     202        gfan::initializeCddlibIfRequired();
     203        BOOLEAN bo = ppCONERAYS3(res, u, v);
     204        gfan::deinitializeCddlibIfRequired();
     205        return bo;
     206      }
    196207    }
    197208  }
     
    320331BOOLEAN polytopeViaNormals(leftv res, leftv args)
    321332{
    322   gfan::initializeCddlibIfRequired();
    323333  leftv u = args;
    324334  if ((u != NULL) && ((u->Typ() == BIGINTMAT_CMD) || (u->Typ() == INTMAT_CMD)))
    325335  {
    326     if (u->next == NULL) return ppCONENORMALS1(res, u);
     336    if (u->next == NULL)
     337    {
     338      gfan::initializeCddlibIfRequired();
     339      BOOLEAN bo = ppCONENORMALS1(res, u);
     340      gfan::deinitializeCddlibIfRequired();
     341      return bo;
     342    }
    327343  }
    328344  leftv v = u->next;
    329345  if ((v != NULL) && ((v->Typ() == BIGINTMAT_CMD) || (v->Typ() == INTMAT_CMD)))
    330346  {
    331     if (v->next == NULL) return ppCONENORMALS2(res, u, v);
     347    if (v->next == NULL)
     348    {
     349      gfan::initializeCddlibIfRequired();
     350      BOOLEAN bo = ppCONENORMALS2(res, u, v);
     351      gfan::deinitializeCddlibIfRequired();
     352      return bo;
     353    }
    332354  }
    333355  leftv w = v->next;
    334356  if ((w != NULL) && (w->Typ() == INT_CMD))
    335357  {
    336     if (w->next == NULL) return ppCONENORMALS3(res, u, v, w);
     358    if (w->next == NULL)
     359    {
     360      gfan::initializeCddlibIfRequired();
     361      BOOLEAN bo = ppCONENORMALS3(res, u, v, w);
     362      gfan::deinitializeCddlibIfRequired();
     363      return bo;
     364    }
    337365  }
    338366  WerrorS("polytopeViaInequalities: unexpected parameters");
     
    342370BOOLEAN vertices(leftv res, leftv args)
    343371{
    344   gfan::initializeCddlibIfRequired();
    345372  leftv u = args;
    346373  if ((u != NULL) && (u->Typ() == polytopeID))
    347     {
    348       gfan::ZCone* zc = (gfan::ZCone*)u->Data();
    349       gfan::ZMatrix zmat = zc->extremeRays();
    350       res->rtyp = BIGINTMAT_CMD;
    351       res->data = (void*)zMatrixToBigintmat(zmat);
    352       return FALSE;
    353     }
     374  {
     375    gfan::initializeCddlibIfRequired();
     376    gfan::ZCone* zc = (gfan::ZCone*)u->Data();
     377    gfan::ZMatrix zmat = zc->extremeRays();
     378    res->rtyp = BIGINTMAT_CMD;
     379    res->data = (void*)zMatrixToBigintmat(zmat);
     380    gfan::deinitializeCddlibIfRequired();
     381    return FALSE;
     382  }
    354383  WerrorS("vertices: unexpected parameters");
    355384  return TRUE;
     
    401430BOOLEAN newtonPolytope(leftv res, leftv args)
    402431{
    403   gfan::initializeCddlibIfRequired();
    404432  leftv u = args;
    405433  if ((u != NULL) && (u->Typ() == POLY_CMD))
    406434  {
     435    gfan::initializeCddlibIfRequired();
    407436    poly p = (poly)u->Data();
    408437    res->rtyp = polytopeID;
    409438    res->data = (void*) new gfan::ZCone(newtonPolytope(p,currRing));
     439    gfan::deinitializeCddlibIfRequired();
    410440    return FALSE;
    411441  }
     
    416446BOOLEAN scalePolytope(leftv res, leftv args)
    417447{
    418   gfan::initializeCddlibIfRequired();
    419448  leftv u = args;
    420449  if ((u != NULL) && (u->Typ() == INT_CMD))
     
    423452    if ((v != NULL) && (v->Typ() == polytopeID))
    424453    {
     454      gfan::initializeCddlibIfRequired();
    425455      int s = (int)(long) u->Data();
    426456      gfan::ZCone* zp = (gfan::ZCone*) v->Data();
     
    433463      res->rtyp = polytopeID;
    434464      res->data = (void*) zq;
     465      gfan::deinitializeCddlibIfRequired();
    435466      return FALSE;
    436467    }
     
    442473BOOLEAN dualPolytope(leftv res, leftv args)
    443474{
    444   gfan::initializeCddlibIfRequired();
    445475  leftv u = args;
    446476  if ((u != NULL) && (u->Typ() == polytopeID))
    447477  {
     478    gfan::initializeCddlibIfRequired();
    448479    gfan::ZCone* zp = (gfan::ZCone*) u->Data();
    449480    gfan::ZCone* zq = new gfan::ZCone(zp->dualCone());
    450481    res->rtyp = polytopeID;
    451482    res->data = (void*) zq;
     483    gfan::deinitializeCddlibIfRequired();
    452484    return FALSE;
    453485  }
     
    458490BOOLEAN mixedVolume(leftv res, leftv args)
    459491{
    460   gfan::initializeCddlibIfRequired();
    461492  leftv u = args;
    462493  if ((u != NULL) && (u->Typ() == LIST_CMD))
    463494  {
     495    gfan::initializeCddlibIfRequired();
    464496    lists l = (lists) u->Data();
    465497    int k = lSize(l)+1;
     
    499531      {
    500532        WerrorS("mixedVolume: entries of unsupported type in list");
     533        gfan::deinitializeCddlibIfRequired();
    501534        return TRUE;
    502535      }
     
    506539    res->rtyp = BIGINT_CMD;
    507540    res->data = (void*) integerToNumber(mv);
     541    gfan::deinitializeCddlibIfRequired();
    508542    return FALSE;
    509543  }
Note: See TracChangeset for help on using the changeset viewer.