Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   [C++ TEMPLATE] Static variable inside a templated function (http://www.velocityreviews.com/forums/t724912-c-template-static-variable-inside-a-templated-function.html)

LiloLilo 06-06-2010 09:19 AM

[C++ TEMPLATE] Static variable inside a templated function
 
Hi all,

the following function writes n bits data to file. Parameter named
'Data' contains the value to be written, 'Length' contains the number
of bits of 'Data' to write. This function uses a static buffer named
BitBuffer to store bits between calls. When BitBuffer is full it is
written to file.

void WriteBitsToFile(unsigned Data, unsigned Length, std::ofstream &
OutFile) {

static unsigned BitBuffer = 0; static unsigned BitCounter = 0;


for (unsigned i = Length; i --; ) {

(BitBuffer <<= 1) |= ((Data >> i) & 0x1); BitCounter ++;

if (BitCounter == 32) { OutFile.write((char *) & BitBuffer,
sizeof(BitBuffer)); BitCounter = 0; }
}

TotalBitCounter += Length;
}

The function works fine, but if I change 'Data' to a templated
variable, BitBuffer gets flushed to 0 at every call, so it does not
retains values between calls. Please note that calls are made always
with the same type for T2 (int) so if I am not wrong it would retain
the value but it doesn't. Why?

template <typename T2> void WriteBitsToFile(T2 Data, unsigned Length,
std::ofstream & OutFile) {

static unsigned BitBuffer = 0; static unsigned BitCounter = 0;


for (unsigned i = Length; i --; ) {

(BitBuffer <<= 1) |= ((Data >> i) & 0x1); BitCounter ++;

if (BitCounter == 32) { OutFile.write((char *) & BitBuffer,
sizeof(BitBuffer)); BitCounter = 0; }
}

TotalBitCounter += Length;
}

Thank you all for help.


Seebs 06-06-2010 09:42 AM

Re: [C++ TEMPLATE] Static variable inside a templated function
 
Your question is about C++. You have posted in a newsgroup which is not
about C++. I urge you to consider posting your question in comp.lang.c++.

> Thank you all for help.


Glad to be of service.

-s
--
Copyright 2010, all wrongs reversed. Peter Seebach / usenet-nospam@seebs.net
http://www.seebs.net/log/ <-- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) <-- get educated!


All times are GMT. The time now is 01:07 AM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.