Changeset 97c955 in git


Ignore:
Timestamp:
Nov 29, 2013, 3:41:32 PM (9 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '48f1dd268d0ff74ef2f7dccbf02545425002ddcc')
Children:
d349786aef1f8f2b89aa38d805322367d4c96364
Parents:
c42a9f75e7b92be96e4b082346d946500227e213
git-author:
Hans Schoenemann <hannes@mathematik.uni-kl.de>2013-11-29 15:41:32+01:00
git-committer:
Hans Schoenemann <hannes@mathematik.uni-kl.de>2013-11-29 15:41:51+01:00
Message:
fix: ring dep. stuff in newstruct: send/receive via links (ssi:6)

from master
Location:
Singular
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • Singular/links/silink.cc

    rc42a9f r97c955  
    192192
    193193//--------------------------------------------------------------------------
     194BOOLEAN slSetRingDummy(si_link, ring r, BOOLEAN send)
     195{
     196  if (currRing!=r) rChangeCurrRing(r);
     197  return FALSE;
     198}
    194199BOOLEAN slOpen(si_link l, short flag, leftv h)
    195200{
     
    218223             c, l->m->type, l->mode, l->name);
    219224    }
     225    if (l->m->SetRing==NULL) l->m->SetRing=slSetRingDummy;
    220226  }
    221227  return res;
  • Singular/links/silink.h

    rc42a9f r97c955  
    3030typedef BOOLEAN    (*slGetDumpProc)(si_link l);
    3131typedef const char* (*slStatusProc)(si_link l, const char *request);
     32typedef BOOLEAN    (*slSetRingProc)(si_link l, ring r, BOOLEAN send);
    3233
    3334struct s_si_link_extension
     
    4445  slGetDumpProc    GetDump;
    4546  slStatusProc     Status;
     47  slSetRingProc    SetRing;
    4648  const char       *type;
    4749};
  • Singular/links/ssiLink.cc

    rc42a9f r97c955  
    5353#include <Singular/si_signals.h>
    5454
    55 #define SSI_VERSION 5
     55#define SSI_VERSION 6
     56// 5->6: changed newstruct representation
    5657
    5758// 64 bit version:
     
    163164      {
    164165        mpz_t tmp;
    165         mpz_init_set_si(tmp,nn);
     166        mpz_init_set_si(tmp,nn);
    166167        fputs("8 ",d->f_write);
    167168        mpz_out_str (d->f_write,32, tmp);
    168169        fputc(' ',d->f_write);
    169         mpz_clear(tmp);
     170        mpz_clear(tmp);
    170171      }
    171172      #endif
     
    434435       {
    435436         LONG dd=s_readlong(d->f_read);
    436         //#if SIZEOF_LONG == 8
     437        //#if SIZEOF_LONG == 8
    437438         return INT_TO_SR(dd);
    438         //#else
    439         //return nlInit(dd,NULL);
    440         //#endif
     439        //#else
     440        //return nlInit(dd,NULL);
     441        //#endif
    441442       }
    442443     case 5:
     
    12301231             // we are in the top-level, so set the basering to d->r:
    12311232             if (d->r!=NULL)
    1232              {
    1233                d->r->ref++;
     1233             {
     1234               d->r->ref++;
    12341235               ssiSetCurrRing(d->r);
    1235              }
     1236             }
    12361237             if (t==15) return ssiRead1(l);
    12371238           }
     
    12891290    case 19: res->rtyp=BIGINTMAT_CMD;
    12901291             res->data=ssiReadBigintmat(d);
    1291              break;
     1292             break;
    12921293    case 20: ssiReadBlackbox(res,l);
    12931294             break;
     
    13111312                #endif
    13121313                si_opt_1=n98_o1;
    1313                 si_opt_2=n98_o2;
     1314                si_opt_2=n98_o2;
    13141315                return ssiRead1(l);
    13151316             }
     
    13321333}
    13331334//**************************************************************************/
     1335BOOLEAN ssiSetRing(si_link l, ring r, BOOLEAN send)
     1336{
     1337  if(SI_LINK_W_OPEN_P(l)==0)
     1338     if (slOpen(l,SI_LINK_OPEN|SI_LINK_WRITE,NULL)) return TRUE;
     1339  ssiInfo *d = (ssiInfo *)l->data;
     1340  if (d->r!=r)
     1341  {
     1342    if (send)
     1343    {
     1344      fputs("15 ",d->f_write);
     1345      ssiWriteRing(d,r);
     1346    }
     1347    d->r=r;
     1348  }
     1349  if (currRing!=r) rChangeCurrRing(r);
     1350  return FALSE;
     1351}
     1352//**************************************************************************/
     1353
    13341354BOOLEAN ssiWrite(si_link l, leftv data)
    13351355{
     
    14631483
    14641484  s->Status=slStatusSsi;
     1485  s->SetRing=ssiSetRing;
    14651486  s->type="ssi";
    14661487  return s;
     
    20102031// 19 bigintmat <r> <c> ...
    20112032//
    2012 // 20 blackbox <name> ...
     2033// 20 blackbox <name> 1 <len> ...
    20132034//
    20142035// 98: verify version: <ssi-version> <MAX_TOK> <OPT1> <OPT2>
  • Singular/newstruct.cc

    rc42a9f r97c955  
    578578  f->m->Write(f, &l);
    579579  lists ll=(lists)d;
    580   memset(&l,0,sizeof(l));
    581   l.rtyp=LIST_CMD;
    582   l.data=ll;
     580  int Ll=lSize(ll);
     581  l.rtyp=INT_CMD;
     582  l.data=(void*)(long)Ll;
    583583  f->m->Write(f, &l);
    584   return FALSE;
    585 }
    586 
    587 BOOLEAN newstruct_deserialize(blackbox **/*b*/, void **d, si_link f)
    588 {
    589   // newstruct is serialiazed as a list,
     584  // set all entries corresponding to "real" mebers to 1 in rings
     585  char *rings=(char*)omAlloc0(Ll+1);
     586  newstruct_member elem=dd->member;
     587  while (elem!=NULL)
     588  {
     589    rings[elem->pos]='\1';
     590    elem=elem->next;
     591  }
     592  int i;
     593  BOOLEAN ring_changed=FALSE;
     594  ring save_ring=currRing;
     595  for(i=0;i<=Ll;i++)
     596  {
     597    if (rings[i]=='\0') // ring entry for pos i+1
     598    {
     599      if (ll->m[i].data!=NULL)
     600      {
     601        ring_changed=TRUE;
     602        f->m->SetRing(f,(ring)ll->m[i].data,TRUE);
     603      }
     604    }
     605    f->m->Write(f,&(ll->m[i]));
     606  }
     607  if (ring_changed)
     608    f->m->SetRing(f,save_ring,FALSE);
     609}
     610
     611BOOLEAN newstruct_deserialize(blackbox **b, void **d, si_link f)
     612{
     613  // newstruct is serialiazed as analog to a list,
    590614  // just read a list and take data,
    591615  // rtyp must be set correctly (to the blackbox id) by routine calling
    592616  // newstruct_deserialize
    593   leftv l=f->m->Read(f);
     617  leftv l=f->m->Read(f); // int: length of list
     618  int Ll=(int)(long)(l->data);
     619  omFree(l);
     620  lists L=(lists)omAllocBin(slists_bin);
     621  L->Init(Ll+1);
     622  for(int i=0;i<=Ll;i++)
     623  {
     624    l=f->m->Read(f);
     625    memcpy(&(L->m[i]),l,sizeof(sleftv));
     626    omFree(l);
     627  }
    594628  //newstruct_desc n=(newstruct_desc)b->data;
    595629  //TODO: check compatibility of list l->data with description in n
    596   *d=l->data;
     630  *d=L;
    597631  return FALSE;
    598632}
     
    763797  return scanNewstructFromString(s,res);
    764798}
     799
    765800void newstructShow(newstruct_desc d)
    766801{
Note: See TracChangeset for help on using the changeset viewer.