map and BYTE[]

V

Vince

Hi,

I am starting to play with with C++ and I have some questions.
I need to parse a XML file that describes a smart card file structure
and to initialize my data structure.
First I chose this structure :

A CCardObject has files (index by SFID) and each file has
records(indexed by RecNo) and each record can be splitted into
data(index by string).


class CDataIndex
{
public :
int m_nSFID; // FileID
int m_nRecNo; // RecNo
int m_nOffset; // Offset
int m_nSize; // DataLen


CDataIndex() { }
CDataIndex(int nSFID, int nRecNo, int nOffset, int size) {
m_nSFID = nSFID;
m_nRecNo = nRecNo;
m_nOffset = nOffset;
m_nSize = size;
}

CDataIndex(const CDataIndex& ob)
{
m_nSFID = ob.m_nSFID;
m_nRecNo = ob.m_nRecNo;
m_nOffset = ob.m_nOffset;
m_nSize = ob.m_nSize;
}

void operator = (const CDataIndex& ob)
{
m_nSFID = ob.m_nSFID;
m_nRecNo = ob.m_nRecNo;
m_nOffset = ob.m_nOffset;
m_nSize = ob.m_nSize;
}
};
class CCardRecord
{
public :
int m_nRecNo;
int m_nRecSize;
map<int, BYTE[29]> m_RecData;

CCardRecord() {}
CCardRecord( int nRecNo ) { m_nRecNo = nRecNo;}

int GetRecNo() { return m_nRecNo; }
int GetRecSize() { return m_nRecSize; }
int GetData(int nOffset, int nSize);
};

class CCardFile
{
public :
int m_nSFID;
map<int, CCardRecord> m_records;

CCardFile() {}
CCardFile( int nSFID ) { m_nSFID = nSFID;}

};



class CCardObj
{
public:
CCardObj();
virtual ~CCardObj();
BOOL LoadCardMapping();
BOOL ReadMappingFile(CXMLReader &xml);
void XMLCardFile(CXMLReader &xml);
void XMLCardRecord( CXMLReader &xml );
void XMLCardData( CXMLReader &xml );

CString m_csTag;
int m_nSFID;
int m_nRecNo;
int m_nRecSize;
int m_nDataOffset;
int m_nDataType;
int m_nDataSize;
CString m_csName;
BYTE m_Data[29];

// CardReader Object - LOW LEVEL API
CCardReader* m_pCardReader;

// Associate stringwith SFID, RecNo, Offset and Size
map<CString, CDataIndex> m_dataIndex;

// File collection index by Short File Id (SFID)
map<int, CCardFile> m_FileIndex;
};

When I parse the XML file and I find the <CardRecord> tag I get its
attributes and I would like to add a new array of byte.
How can I do that ?



void CCardObj::XMLCardRecord( CXMLReader &xml )
{
xml.getAttribute( "index", m_nRecNo ); // Get record No
xml.getAttribute( "size", m_nRecSize );// Get record size

m_FileIndex[ m_nSFID ].m_records[ m_nRecNo ] = ????

xml.intoTag();
while ( xml.nextTag( m_csTag ) ){
if (m_csTag == "CardData"){
XMLCardData( xml );
}
}
xml.outofTag();
}
 
M

Mike Wahler

Vince said:
Hi,

When I parse the XML file and I find the <CardRecord> tag I get its
attributes and I would like to add a new array of byte.
How can I do that ?

unsigned char array = new char[how_many_chars];
/* work with the array */
delete[] array;
 
J

Jay Nabonne

On Mon, 17 Jan 2005 22:42:15 +0000, Mike Wahler wrote:


ITYM:
unsigned char* array = new char[how_many_chars];
 
V

Victor Bazarov

Mike said:
Hi,

When I parse the XML file and I find the <CardRecord> tag I get its
attributes and I would like to add a new array of byte.
How can I do that ?


unsigned char array = new char[how_many_chars];

unsigned char *array = new char[how_many_chars];
/* work with the array */
delete[] array;

V
 
M

Mike Wahler

Victor Bazarov said:
Mike said:
Hi,

When I parse the XML file and I find the <CardRecord> tag I get its
attributes and I would like to add a new array of byte.
How can I do that ?


unsigned char array = new char[how_many_chars];

unsigned char *array = new char[how_many_chars];

Dang! I think I'll go do some laundry or something. :)

Thanks for the correction.

-Mike
 
M

Mike Wahler

Sjoerd A. Schreuder said:
Victor said:
Mike said:
unsigned char array = new char[how_many_chars];

unsigned char *array = new char[how_many_chars];
^^^^^^^^^^^^^ ^^^^

Those aren't the same type.

Hmm, yes I missed that, as well as those who corrected my
other error.

One more try:

unsigned char *array = new unsigned char[how_many_chars];

-Mike
 
O

Old Wolf

Vince said:
class CCardRecord
{
public :
int m_nRecNo;
int m_nRecSize;
map<int, BYTE[29]> m_RecData;

You cannot have an array as the value type for a standard
library container. I suggest you replace BYTE[29] with
a std::vector<BYTE> . (That also avoids having to do
the 'new' statement that has been problematic in this thread).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,773
Messages
2,569,594
Members
45,120
Latest member
ShelaWalli
Top