Clear the atom value to null. Note this does not set the type to undefined. Arguments: None
| Return Type | Function name | Arguments |
|---|---|---|
| hzAtom& | hzAtom::Clear | (void) |
Declared in file: hzDatabase.h
Defined in file : hzAtom.cpp
Function Logic:
Function body:
hzAtom& hzAtom::Clear (void)
{
// Clear the atom value to null. Note this does not set the type to undefined.
//
// Arguments: None
// Returns: Reference to this atom
_hzfunc("hzAtom::Clear") ;
// Check atom integrity
if (m_eStatus == ATOM_CLEAR)
{
// Must not have either data type or value
if (m_eType == BASETYPE_UNDEF)
{
if (m_Data.m_uInt64)
hzerr(E_CORRUPT, "Atom status clear, no data type but non-zero value") ;
m_Data.m_uInt64 = 0;
m_eStatus = ATOM_CLEAR ;
m_eType = BASETYPE_UNDEF ;
}
else
{
if (m_Data.m_uInt64)
hzerr(E_CORRUPT, "Atom status clear but has data type and value") ;
else
hzerr(E_CORRUPT, "Atom status clear, no value but type %s", Basetype2Txt(m_eType)) ;
m_Data.m_uInt64 = 0;
m_eStatus = ATOM_CLEAR ;
m_eType = BASETYPE_UNDEF ;
}
// Atom is clear so just return
return *this ;
}
if (m_eStatus == ATOM_ERROR)
{
// Must not have a type, cast, or a value
if (m_eType != BASETYPE_UNDEF) hzerr(E_CORRUPT, "Atom status error - but with data type %s", Basetype2Txt(m_eType)) ;
if (m_Data.m_uInt64) hzerr(E_CORRUPT, "Atom status error - but with value") ;
m_Data.m_uInt64 = 0;
m_eStatus = ATOM_CLEAR ;
m_eType = BASETYPE_UNDEF ;
return *this ;
}
if (m_eStatus == ATOM_SET)
{
// Must have data type. Value could be 0 for numeric data types.
if (m_eType == BASETYPE_UNDEF)
hzexit(E_CORRUPT, "Atom status set but no data type") ;
}
else
{
// Status is unknown
hzexit(E_CORRUPT, "Atom status unknown") ;
}
// To get this far the atom must be set, have data type and a legal value for the type
if (m_eType == BASETYPE_DIGEST)
{
if (m_Data.m_pVoid)
delete [] (uchar*) m_Data.m_pVoid ;
}
// if (m_bCast && m_Data.m_uInt32)
if (m_Data.m_uInt32)
{
if (m_eType == BASETYPE_STRING)
{
hzString tmp ;
tmp._int_set(m_Data.m_uInt32) ;
tmp.Clear() ;
}
if (m_eType == BASETYPE_DOMAIN)
{
hzDomain tmp ;
tmp._int_set(m_Data.m_uInt32) ;
tmp.Clear() ;
}
if (m_eType == BASETYPE_EMADDR)
{
hzEmaddr tmp ;
tmp._int_set(m_Data.m_uInt32) ;
tmp.Clear() ;
}
if (m_eType == BASETYPE_URL)
{
hzUrl tmp ;
tmp._int_set(m_Data.m_uInt32) ;
tmp.Clear() ;
}
}
m_Data.m_uInt64 = 0;
m_eType = BASETYPE_UNDEF ;
m_eStatus = ATOM_CLEAR ;
// m_bCast = 0 ;
return *this ;
}