void MemberClass::AddDatum(DATUM_TYPE type, struct namelist *nameInfo,
                           sint32 minSize, sint32 maxSize,
                           char *subType)
{

	Datum *dat = new Datum(nameInfo->name, type);
	dat->m_akaName = nameInfo->akaName;
	dat->m_defaultName = nameInfo->defaultName;
	dat->m_minSize = minSize;
	dat->m_maxSize = maxSize;
	dat->m_subType = subType;

	//Added by Martin Gühmann to allow struct members to have default values
	if(!(nameInfo->flags & k_NAMEVALUE_HAS_VALUE)
	&&   maxSize <= 0
	){
		switch(type)
		{
		default:
			break;

		case DATUM_INT:
		case DATUM_FLOAT:
		case DATUM_STRUCT:
		case DATUM_STRING:
		case DATUM_FILE:
		case DATUM_STRINGID:
			dat->m_required = true;
			break;
		}
	}
	else
	{
		dat->SetValue(nameInfo->v);
	}

	m_datumList.AddTail(dat);

	if (dat->m_type == DATUM_BIT)
	{
		dat->m_bitNum = m_numBits;
		m_numBits++;
	}
}
//Added by Martin Gühmann
void MemberClass::AddBitPair(struct namelist *nameInfo, sint32 minSize, sint32 maxSize, struct bitpairtype *pairtype)
{
	Datum *dat = new Datum(nameInfo->name, DATUM_BIT_PAIR);
	dat->m_minSize = minSize;
	dat->m_maxSize = maxSize;
	// Added by Martin Gühmann for adding default values
	if((nameInfo->flags & k_NAMEVALUE_HAS_VALUE)
	|| (maxSize > 0)
	){
		dat->SetValue(nameInfo->v);
	}
	dat->m_bitNum = m_numBits;
	m_numBits++;

	char * l_Name = (char *) malloc(strlen(nameInfo->name) + strlen("Value") + 1);
	strcpy(l_Name, nameInfo->name);
	strcat(l_Name, "Value");
	Datum * pairDat = new Datum(l_Name, (DATUM_TYPE) pairtype->type);
	pairDat->m_subType = (char *) pairtype->extraData;

	dat->m_bitPairDatum = pairDat;
	m_datumList.AddTail(dat);
}