#include <iostream>
#include <string>
using namespace gdcm;
struct SDOElement
{
typedef std::vector<std::string>::size_type SizeType;
const char *GetData(SizeType index) const {
return Data[index].c_str();
}
SizeType GetNumberOfData() const {
return Data.size();
}
void SetData(SizeType index, const char *data) {
Data[index] = data;
}
const char *GetDataFormat() const {
return DataFormat.c_str();
}
void SetDataFormat(const char *dataformat, SizeType num) {
DataFormat = dataformat;
Data.resize( num );
}
void Print( std::ostream &os ) const {
os << DataFormat << ":" << std::endl;
std::vector<std::string>::const_iterator it = Data.begin();
size_t s = 0;
for( ; it != Data.end(); ++it )
{
os << " (" << s++ << ") " << *it << std::endl;
}
}
private:
std::string DataFormat;
std::vector<std::string> Data;
};
class SDOHeader
{
public:
typedef std::vector<SDOElement> SDOElements;
typedef SDOElements::size_type SizeType;
SizeType GetNumberOfSDOElements() const {
return InternalSDODataSet.size();
}
void AddSDOElement(SDOElement const &sdoelement) {
InternalSDODataSet.push_back( sdoelement );
}
const SDOElement &GetSDOElement(SizeType index) const {
return InternalSDODataSet[index];
}
const SDOElement &GetSDOElementByName(const char *name) const {
return InternalSDODataSet[0];
}
void LoadFromAttributes(std::string const &s1, std::string const &s2)
{
std::string tok;
std::string tok2;
std::stringstream strstr(s1);
std::stringstream strstr2(s2);
SDOElement element;
size_t count = 0;
while ( std::getline ( strstr2, tok, '\\' ) )
{
std::getline ( strstr2, tok2, '\\' );
count += atoi( tok2.c_str() );
element.SetDataFormat( tok.c_str(), atoi( tok2.c_str() ) );
for( size_t t = 0; t < element.GetNumberOfData(); ++t )
{
std::getline ( strstr, tok, '\\' );
element.SetData(t, tok.c_str() );
}
AddSDOElement( element );
}
}
void Print( std::ostream &os ) const {
SDOElements::const_iterator it = InternalSDODataSet.begin();
for( ; it != InternalSDODataSet.end(); ++it )
{
it->Print ( os );
}
}
private:
SDOElements InternalSDODataSet;
};
{
std::string s1 = std::string( sd, len_sd );
std::string s2 = std::string( sdf, len_sdf );
SDOHeader header;
header.LoadFromAttributes( s1, s2 );
header.Print( std::cout );
return true;
}
int main(int argc, char *argv[])
{
if( argc < 2 )
{
std::cerr << argv[0] << " input.dcm" << std::endl;
return 1;
}
const char *filename = argv[1];
{
return 1;
}
const PrivateTag tstringdata(0x33,0x1f,
"GEMS_GENIE_1");
const PrivateTag tstringdataformat(0x33,0x23,
"GEMS_GENIE_1");
sdo_decode( stringdata, stringdataformat );
return 0;
}