MCPcopy Create free account
hub / github.com/Singular/Singular / iiArithAddCmd

Function iiArithAddCmd

Singular/iparith.cc:10105–10162  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10103}
10104
10105int iiArithAddCmd(
10106 const char *szName,
10107 short nAlias,
10108 short nTokval,
10109 short nToktype,
10110 short nPos
10111 )
10112{
10113 //printf("AddCmd(%s, %d, %d, %d, %d)\n", szName, nAlias,
10114 // nTokval, nToktype, nPos);
10115 if(nPos>=0)
10116 {
10117 // no checks: we rely on a correct generated code in iparith.inc
10118 assume((unsigned)nPos < sArithBase.nCmdAllocated);
10119 assume(szName!=NULL);
10120 sArithBase.sCmds[nPos].name = omStrDup(szName);
10121 sArithBase.sCmds[nPos].alias = nAlias;
10122 sArithBase.sCmds[nPos].tokval = nTokval;
10123 sArithBase.sCmds[nPos].toktype = nToktype;
10124 sArithBase.nCmdUsed++;
10125 //if(nTokval>0) sArithBase.nLastIdentifier++;
10126 }
10127 else
10128 {
10129 if(szName==NULL) return -1;
10130 int nIndex = iiArithFindCmd(szName);
10131 if(nIndex>=0)
10132 {
10133 Print("'%s' already exists at %d\n", szName, nIndex);
10134 return -1;
10135 }
10136
10137 if(sArithBase.nCmdUsed>=sArithBase.nCmdAllocated)
10138 {
10139 /* needs to create new slots */
10140 unsigned long nSize = (sArithBase.nCmdAllocated+1)*sizeof(cmdnames);
10141 sArithBase.sCmds = (cmdnames *)omRealloc(sArithBase.sCmds, nSize);
10142 if(sArithBase.sCmds==NULL) return -1;
10143 sArithBase.nCmdAllocated++;
10144 }
10145 /* still free slots available */
10146 sArithBase.sCmds[sArithBase.nCmdUsed].name = omStrDup(szName);
10147 sArithBase.sCmds[sArithBase.nCmdUsed].alias = nAlias;
10148 sArithBase.sCmds[sArithBase.nCmdUsed].tokval = nTokval;
10149 sArithBase.sCmds[sArithBase.nCmdUsed].toktype = nToktype;
10150 sArithBase.nCmdUsed++;
10151
10152 qsort(sArithBase.sCmds, sArithBase.nCmdUsed, sizeof(cmdnames),
10153 (&_gentable_sort_cmds));
10154 for(sArithBase.nLastIdentifier=sArithBase.nCmdUsed-1;
10155 sArithBase.nLastIdentifier>0; sArithBase.nLastIdentifier--)
10156 {
10157 if(sArithBase.sCmds[sArithBase.nLastIdentifier].tokval>=0) break;
10158 }
10159 //Print("L=%d\n", sArithBase.nLastIdentifier);
10160 }
10161 return 0;
10162}

Callers 1

test_Timing1Method · 0.85

Calls 2

iiArithFindCmdFunction · 0.85
PrintFunction · 0.50

Tested by 1

test_Timing1Method · 0.68