Ah. Well, that is true =) Still, the fact of the file-pointer shifting more than 16-increments to the right is insane. Its a simple read(&struct,16) command.
but you're right, the problem might lie elsewhere. I forgot that using 0 for a sentinel value in two places can confuse a complier (let alone me.) I ended up fixing it by resetting the file-pointer to zero on re-entry, and then manually fseeking() to the correct location each time. Its one extra command per iteration, but not a huge speed issue. I feel bad using a global file object, but its that or I open/close it every time I call the funct. Thanks for pointing out that bit of confusion =) 2008/3/6, Gabriel Genellina <[EMAIL PROTECTED]>: > > En Thu, 06 Mar 2008 13:54:44 -0200, Michael Wieher > <[EMAIL PROTECTED]> escribi�: > > > > Observe. > > > > Python Code Snippet: > > ==================== > > ... > > 66 while i < (self.nPCodes): > > 67 # print "%s:%s" % (self.nPCodes,i) > > 68 (c,l,sn,f,fn,sz) = tabmodule.getQuestion(i,self.mx3Path) > > 69 if _debug and sz>0: > > 70 _newPtrLoc = tabmodule.getMx3Ptr() > > 71 _diff = _newPtrLoc-_oldPtrLoc > > 72 _oldPtrLoc = _newPtrLoc > > 73 if _diff>16: > > 74 print _diff > > .... > > > > C++ Code Snippet: > > --------------------------- > > 189 static PyObject* > > 190 tabmodule_getMx3Ptr(PyObject * self, PyObject * args) { > > 191 int a; > > 192 a=mx3File.tellg(); > > 193 return Py_BuildValue("i",a); > > 194 } > > ... > > > > 189 PyObject * > > 190 tabmodule_getQuestion(PyObject * self, PyObject * args) { > > .... > > 208 mx3File.read((char*)&m_mdx,16); > > .... > > 237 //if(m_mdx.size==0) > > 238 return Py_BuildValue("iiiiii",0,0,0,0,0,0); > > 239 //return Py_BuildValue("iiiiii",m_mdx.compression, > > m_mdx.location, > > m_mdx.stacknotes, m_mdx.file, m_mdx.footnote, m_mdx.size); > > } > > > > Output== > > [EMAIL PROTECTED]:~/MRI/tabModule$ ./tabModule.py > > [EMAIL PROTECTED]:~/MRI/tabModule$ > > > > None. (ie: the _diff is always 16 or less, which is what is SHOULD be, > > in > > fact, it is always 16.) > > > Why do you assert that? With those commented out lines, the last item > returned by getQuestion (sz) is always 0; nothing is printed because sz==0 > and the python code never enters the outer if. From that evidence I can't > say anything about _diff. > > > > Observe!!!! > > > > 237 if(m_mdx.size==0) > > 238 return Py_BuildValue("iiiiii",0,0,0,0,0,0); > > 239 return Py_BuildValue("iiiiii",m_mdx.compression, m_mdx.location, > > m_mdx.stacknotes, m_mdx.file, m_mdx.footnote, m_mdx.size); > > > > By uncommenting line 237 and 239, we see: > > ... > > 64 > > 80 > > 32 > > 32 > > 32 > > 48 > > 128 > > 160 > > 32 > > 32 > > 64 > > .... > > > > Most of the numbers are still 16, but _diff is often larger than 16, by > > some > > multiple. > > > I'd print m_mdx values in the C++ source. > > > > How in Buddah's name is returning a Py_BuildValue() affecting a file > > pointer > > that isn't being used at all in the function???? > > > I don't think this is the cause... > > -- > Gabriel Genellina > > > -- > http://mail.python.org/mailman/listinfo/python-list
-- http://mail.python.org/mailman/listinfo/python-list