ever so slightly faster movie i/o? this has hit diminishing returns. binary mode is all that is left
This commit is contained in:
parent
f17b83fb22
commit
d159696288
|
@ -47,6 +47,9 @@ using namespace std;
|
||||||
|
|
||||||
//todo - handle case where read+write is requested, but the file is actually readonly (could be confusing)
|
//todo - handle case where read+write is requested, but the file is actually readonly (could be confusing)
|
||||||
|
|
||||||
|
//todo - could we, given a field size, over-read from an inputstream and then parse out an integer?
|
||||||
|
//that would be faster than several reads, perhaps.
|
||||||
|
|
||||||
//sometimes we accidentally produce movie stop signals while we're trying to do other things with movies..
|
//sometimes we accidentally produce movie stop signals while we're trying to do other things with movies..
|
||||||
bool suppressMovieStop=false;
|
bool suppressMovieStop=false;
|
||||||
|
|
||||||
|
@ -143,7 +146,7 @@ void MovieRecord::parse(MovieData* md, std::istream* is)
|
||||||
//by the time we get in here, the initial pipe has already been extracted
|
//by the time we get in here, the initial pipe has already been extracted
|
||||||
|
|
||||||
//extract the commands
|
//extract the commands
|
||||||
commands = uintDecFromIstream(is);
|
commands = uint32DecFromIstream(is);
|
||||||
//*is >> commands;
|
//*is >> commands;
|
||||||
is->get(); //eat the pipe
|
is->get(); //eat the pipe
|
||||||
|
|
||||||
|
@ -165,13 +168,12 @@ void MovieRecord::parse(MovieData* md, std::istream* is)
|
||||||
{
|
{
|
||||||
int x,y,b,bogo;
|
int x,y,b,bogo;
|
||||||
uint64 zaphit;
|
uint64 zaphit;
|
||||||
*is >> x >> y >> b >> bogo >> zaphit;
|
//*is >> x >> y >> b >> bogo >> zaphit;
|
||||||
//todo: test uintDecFromIstream
|
zappers[port].x = uint32DecFromIstream(is);
|
||||||
zappers[port].x = x;
|
zappers[port].y = uint32DecFromIstream(is);
|
||||||
zappers[port].y = y;
|
zappers[port].b = uint32DecFromIstream(is);
|
||||||
zappers[port].b = b;
|
zappers[port].bogo = uint32DecFromIstream(is);
|
||||||
zappers[port].bogo = bogo;
|
zappers[port].zaphit = uint64DecFromIstream(is);
|
||||||
zappers[port].zaphit = zaphit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
is->get(); //eat the pipe
|
is->get(); //eat the pipe
|
||||||
|
@ -192,7 +194,9 @@ void MovieRecord::dump(MovieData* md, std::ostream* os, int index)
|
||||||
//fprintf(fp,"%08d",index);
|
//fprintf(fp,"%08d",index);
|
||||||
|
|
||||||
//dump the misc commands
|
//dump the misc commands
|
||||||
*os << '|' << setw(1) << (int)commands;
|
//*os << '|' << setw(1) << (int)commands;
|
||||||
|
os->put('|');
|
||||||
|
putdec<uint8,1,true>(os,commands);
|
||||||
|
|
||||||
//a special case: if fourscore is enabled, dump four gamepads
|
//a special case: if fourscore is enabled, dump four gamepads
|
||||||
if(md->fourscore)
|
if(md->fourscore)
|
||||||
|
@ -211,7 +215,13 @@ void MovieRecord::dump(MovieData* md, std::ostream* os, int index)
|
||||||
if(md->ports[port] == SI_GAMEPAD)
|
if(md->ports[port] == SI_GAMEPAD)
|
||||||
dumpJoy(os, joysticks[port]);
|
dumpJoy(os, joysticks[port]);
|
||||||
else if(md->ports[port] == SI_ZAPPER)
|
else if(md->ports[port] == SI_ZAPPER)
|
||||||
*os << setw(3) << setfill('0') << (int)zappers[port].x << ' ' << setw(3) << setfill('0') << (int)zappers[port].y << setw(1) << ' ' << (int)zappers[port].b << ' ' << (int)zappers[port].bogo << ' ' << zappers[port].zaphit;
|
{
|
||||||
|
putdec<uint8,3,true>(os,zappers[port].x); os->put(' ');
|
||||||
|
putdec<uint8,3,true>(os,zappers[port].y); os->put(' ');
|
||||||
|
putdec<uint8,1,true>(os,zappers[port].b); os->put(' ');
|
||||||
|
putdec<uint8,1,true>(os,zappers[port].bogo); os->put(' ');
|
||||||
|
putdec<uint64,20,false>(os,zappers[port].zaphit);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
os->put('|');
|
os->put('|');
|
||||||
}
|
}
|
||||||
|
|
|
@ -463,22 +463,6 @@ char *U8ToHexStr(uint8 a)
|
||||||
return TempArray;
|
return TempArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int uintDecFromIstream(std::istream* is)
|
|
||||||
{
|
|
||||||
unsigned int ret = 0;
|
|
||||||
|
|
||||||
for(;;)
|
|
||||||
{
|
|
||||||
int d = is->get() - '0';
|
|
||||||
if(d<0 || d>9)
|
|
||||||
break;
|
|
||||||
ret *= 10;
|
|
||||||
ret += d;
|
|
||||||
}
|
|
||||||
is->unget();
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string stditoa(int n)
|
std::string stditoa(int n)
|
||||||
{
|
{
|
||||||
char tempbuf[16];
|
char tempbuf[16];
|
||||||
|
@ -486,4 +470,3 @@ std::string stditoa(int n)
|
||||||
return tempbuf;
|
return tempbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -58,4 +58,51 @@ char *U16ToHexStr(uint16 a);
|
||||||
std::string stditoa(int n);
|
std::string stditoa(int n);
|
||||||
|
|
||||||
//extracts a decimal uint from an istream
|
//extracts a decimal uint from an istream
|
||||||
unsigned int uintDecFromIstream(std::istream* is);
|
template<typename T> T templateIntegerDecFromIstream(std::istream* is)
|
||||||
|
{
|
||||||
|
unsigned int ret = 0;
|
||||||
|
bool pre = true;
|
||||||
|
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
int d = is->get() - '0';
|
||||||
|
if((d<0 || d>9))
|
||||||
|
{
|
||||||
|
if(!pre)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pre = false;
|
||||||
|
ret *= 10;
|
||||||
|
ret += d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is->unget();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint32 uint32DecFromIstream(std::istream* is) { return templateIntegerDecFromIstream<uint32>(is); }
|
||||||
|
inline uint64 uint64DecFromIstream(std::istream* is) { return templateIntegerDecFromIstream<uint64>(is); }
|
||||||
|
|
||||||
|
//puts an optionally 0-padded decimal integer of type T into the ostream (0-padding is quicker)
|
||||||
|
template<typename T, int DIGITS, bool PAD> void putdec(std::ostream* os, T dec)
|
||||||
|
{
|
||||||
|
char temp[DIGITS];
|
||||||
|
int ctr = 0;
|
||||||
|
for(int i=0;i<DIGITS;i++)
|
||||||
|
{
|
||||||
|
int quot = dec/10;
|
||||||
|
int rem = dec%10;
|
||||||
|
temp[DIGITS-1-i] = '0' + rem;
|
||||||
|
if(!PAD)
|
||||||
|
{
|
||||||
|
if(rem != 0) ctr = i;
|
||||||
|
}
|
||||||
|
dec = quot;
|
||||||
|
}
|
||||||
|
if(!PAD)
|
||||||
|
os->write(temp+DIGITS-ctr-1,ctr+1);
|
||||||
|
else
|
||||||
|
os->write(temp,DIGITS);
|
||||||
|
}
|
Loading…
Reference in New Issue