00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "torc/bitstream/Bitstream.hpp"
00020 #include <boost/filesystem.hpp>
00021 #include <ostream>
00022
00023 namespace torc {
00024 namespace bitstream {
00025
00026 void Bitstream::writeSubfieldSettings(std::ostream& inStream, uint32_t inWord,
00027 const Subfield* inSubfields) {
00028
00029 int subfieldCount = 0;
00030 while(inSubfields[subfieldCount].mMask) subfieldCount++;
00031
00032 inStream << " (";
00033 for(int index = subfieldCount; index > 0; index--) {
00034 uint32_t field = index - 1;
00035 const Subfield& subfield = inSubfields[field];
00036 uint32_t value = (inWord & subfield.mMask) >> subfield.mShift;
00037 inStream << (*subfield.mBitgenName == 0 ? subfield.mConfigGuideName
00038 : subfield.mBitgenName) << ":";
00039 const char** ptr = subfield.mValues;
00040 for(uint32_t i = 0; ; i++) {
00041 if(*ptr == 0) { inStream << "[UNKNOWN " << i << "]"; break; }
00042 if(value == i) { inStream << *ptr; break; }
00043 ptr++;
00044 }
00045 if(index > 1) inStream << ", ";
00046 }
00047 inStream << ")";
00048 }
00049
00050 void Bitstream::writeSubfieldSettings(std::ostream& inStream, uint16_t inWord,
00051 const Subfield* inSubfields) {
00052
00053 int subfieldCount = 0;
00054 while(inSubfields[subfieldCount].mMask) subfieldCount++;
00055
00056 inStream << " (";
00057 for(int index = subfieldCount; index > 0; index--) {
00058 uint16_t field = index - 1;
00059 const Subfield& subfield = inSubfields[field];
00060 uint16_t value = (inWord & subfield.mMask) >> subfield.mShift;
00061 inStream << (*subfield.mBitgenName == 0 ? subfield.mConfigGuideName
00062 : subfield.mBitgenName) << ":";
00063 const char** ptr = subfield.mValues;
00064 for(uint16_t i = 0; ; i++) {
00065 if(*ptr == 0) { inStream << "[UNKNOWN " << i << "]"; break; }
00066 if(value == i) { inStream << *ptr; break; }
00067 ptr++;
00068 }
00069 if(index > 1) inStream << ", ";
00070 }
00071 inStream << ")";
00072 }
00073
00074 void Bitstream::writeDeviceInfo(std::ostream& inStream,
00075 const std::string& inDeviceName) {
00076
00077 inStream << "\t// " << inDeviceName << " static device information." << std::endl;
00078 inStream << "\tboost::uint32_t " << inDeviceName << "Columns[] = { ";
00079 ColumnTypeVector::const_iterator p = mDeviceInfo.getColumnTypes().begin();
00080 ColumnTypeVector::const_iterator e = mDeviceInfo.getColumnTypes().end();
00081 while(p < e) inStream << mColumnDefs[*p++].getName() << ", ";
00082 inStream << "END };" << std::endl;
00083
00084 inStream << "\tDeviceInfo " << inDeviceName << "(" << mDeviceInfo.getTileCount() << ", "
00085 << mDeviceInfo.getRowCount() << ", " << mDeviceInfo.getColCount() << ", "
00086 << inDeviceName << "Columns);" << std::endl;
00087 }
00088
00089 }
00090 }