📄 undname.inl
字号:
else
local += st;
// And return the newly formed 'DName'
return local;
} // End of "DName" OPERATOR "+(DNameStatus)"
DName & __near DName::operator += ( char ch )
{
if ( ch )
if ( isEmpty ())
*this = ch;
else
{
node = node->clone ();
if ( node )
*node += gnew charNode ( ch );
else
stat = DN_error;
} // End of IF
// And return self
return *this;
} // End of "DName" OPERATOR "+=(char)"
DName & __near DName::operator += ( pcchar_t str )
{
if ( str && *str )
if ( isEmpty ())
*this = str;
else
{
node = node->clone ();
if ( node )
*node += gnew pcharNode ( str );
else
stat = DN_error;
} // End of IF
// And return self
return *this;
} // End of "DName" OPERATOR "+=(pcchar_t)"
DName & __near DName::operator += ( const DName & rd )
{
if ( rd.isEmpty ())
*this += rd.status ();
else
if ( isEmpty ())
*this = rd;
else
{
node = node->clone ();
if ( node )
*node += rd.node;
else
stat = DN_error;
} // End of IF
// And return self
return *this;
} // End of "DName" OPERATOR "+=(const DName&)"
DName & __near DName::operator += ( DName * pd )
{
if ( pd )
if ( isEmpty ())
*this = pd;
elif (( pd->status () == DN_valid ) || ( pd->status () == DN_truncated ))
{
DNameNode * pNew = gnew pDNameNode ( pd );
if ( pNew )
{
node = node->clone ();
if ( node )
*node += pNew;
} // End of IF then
else
node = 0;
if ( !node )
stat = DN_error;
} // End of IF then
else
*this += pd->status ();
// And return self
return *this;
} // End of "DName" OPERATOR "+=(DName*)"
DName & __near DName::operator += ( DNameStatus st )
{
if ( isEmpty () || (( st == DN_invalid ) || ( st == DN_error )))
*this = st;
else
{
DNameNode * pNew = gnew DNameStatusNode ( st );
if ( pNew )
{
node = node->clone ();
if ( node )
*node += pNew;
} // End of IF then
else
node = 0;
if ( !node )
stat = DN_error;
} // End of IF else
// Return self
return *this;
} // End of "DName" OPERATOR "+=(DNameStatus)"
DName & __near DName::operator |= ( const DName & rd )
{
// Attenuate the error status. Always becomes worse. Don't propogate truncation
if (( status () != DN_error ) && !rd.isValid ())
stat = rd.status ();
// And return self
return *this;
} // End of "DName" OPERATOR '|=(const DName&)'
DName & __near DName::operator = ( char ch )
{
isIndir = 0;
isAUDC = 0;
isAUDTThunk = 0;
doPchar ( &ch, 1 );
return *this;
} // End of "DName" OPERATOR '=(char)'
DName & __near DName::operator = ( pcchar_t str )
{
isIndir = 0;
isAUDC = 0;
isAUDTThunk = 0;
doPchar ( str, strlen ( str ));
// And return self
return *this;
} // End of "DName" OPERATOR '=(pcchar_t)'
DName & __near DName::operator = ( const DName & rd )
{
if (( status () == DN_valid ) || ( status () == DN_truncated ))
{
stat = rd.stat;
isIndir = rd.isIndir;
isAUDC = rd.isAUDC;
isAUDTThunk = rd.isAUDTThunk;
node = rd.node;
} // End of IF
// And return self
return *this;
} // End of "DName" OPERATOR '=(const DName&)'
DName & __near DName::operator = ( DName * pd )
{
if (( status () == DN_valid ) || ( status () == DN_truncated ))
if ( pd )
{
isIndir = 0;
isAUDC = 0;
isAUDTThunk = 0;
node = gnew pDNameNode ( pd );
if ( !node )
stat = DN_error;
} // End of IF then
else
*this = DN_error;
// And return self
return *this;
} // End of "DName" OPERATOR '=(DName*)'
DName & __near DName::operator = ( DNameStatus st )
{
if (( st == DN_invalid ) || ( st == DN_error ))
{
node = 0;
if ( status () != DN_error )
stat = st;
} // End of IF then
elif (( status () == DN_valid ) || ( status () == DN_truncated ))
{
isIndir = 0;
isAUDC = 0;
isAUDTThunk = 0;
node = gnew DNameStatusNode ( st );
if ( !node )
stat = DN_error;
} // End of ELIF then
// And return self
return *this;
} // End of "DName" OPERATOR '=(DNameStatus)'
// Private implementation functions for 'DName'
void __near DName::doPchar ( pcchar_t str, int len )
{
if ( !(( status () == DN_invalid ) || ( status () == DN_error )))
if ( node )
*this = DN_error;
elif ( str && len )
{
// Allocate as economically as possible
switch ( len )
{
case 0:
stat = DN_error;
break;
case 1:
node = gnew charNode ( *str );
if ( !node )
stat = DN_error;
break;
default:
node = gnew pcharNode ( str, len );
if ( !node )
stat = DN_error;
break;
} // End of SWITCH
} // End of ELIF
else
stat = DN_invalid;
} // End of "DName" FUNCTION "doPchar(pcchar_t,int)"
// The member functions for the 'Replicator'
inline int __near Replicator::isFull () const { return ( index == 9 ); }
inline __near Replicator::Replicator ()
: ErrorDName ( DN_error ), InvalidDName ( DN_invalid )
{ index = -1; }
Replicator & __near Replicator::operator += ( const DName & rd )
{
if ( !isFull () && !rd.isEmpty ())
{
DName * pNew = gnew DName ( rd );
// Don't update if failed
if ( pNew )
dNameBuffer[ ++index ] = pNew;
} // End of IF
return *this;
} // End of "Replicator" OPERATOR '+=(const DName&)'
const DName & __near Replicator::operator [] ( int x ) const
{
if (( x < 0 ) || ( x > 9 ))
return ErrorDName;
elif (( index == -1 ) || ( x > index ))
return InvalidDName;
else
return *dNameBuffer[ x ];
} // End of "Replicator" OPERATOR '[](int)'
// The member functions for the 'DNameNode' classes
#if ( !NO_VIRTUAL )
__near DNameNode::DNameNode ()
#else // } elif NO_VIRTUAL {
__near DNameNode::DNameNode ( NodeType ndTy )
: typeIndex ( ndTy )
#endif // NO_VIRTUAL
{ next = 0; }
inline __near DNameNode::DNameNode ( const DNameNode & rd ) { next = (( rd.next ) ? rd.next->clone () : 0 ); }
inline DNameNode * __near DNameNode::nextNode () const { return next; }
DNameNode * __near DNameNode::clone ()
{
return gnew pDNameNode ( gnew DName ( this ));
}
#if ( NO_VIRTUAL )
int __near DNameNode::length () const
{ // Pure function, should not be called
switch ( typeIndex )
{
case charNode_t:
return ((charNode*)this )->length ();
case pcharNode_t:
return ((pcharNode*)this )->length ();
case pDNameNode_t:
return ((pDNameNode*)this )->length ();
case DNameStatusNode_t:
return ((DNameStatusNode*)this )->length ();
} // End of SWITCH
return 0;
}
int __near DNameNode::getLastChar () const
{ // Pure function, should not be called
switch ( typeIndex )
{
case charNode_t:
return ((charNode*)this )->getLastChar ();
case pcharNode_t:
return ((pcharNode*)this )->getLastChar ();
case pDNameNode_t:
return ((pDNameNode*)this )->getLastChar ();
case DNameStatusNode_t:
return ((DNameStatusNode*)this )->getLastChar ();
} // End of SWITCH
return 0;
}
pchar_t __near DNameNode::getString ( pchar_t s, int l ) const
{ // Pure function, should not be called
switch ( typeIndex )
{
case charNode_t:
return ((charNode*)this )->getString ( s, l );
case pcharNode_t:
return ((pcharNode*)this )->getString ( s, l );
case pDNameNode_t:
return ((pDNameNode*)this )->getString ( s, l );
case DNameStatusNode_t:
return ((DNameStatusNode*)this )->getString ( s, l );
} // End of SWITCH
return 0;
}
#endif // NO_VIRTUAL
DNameNode & __near DNameNode::operator += ( DNameNode * pNode )
{
if ( pNode )
{
if ( next )
{
// Skip to the end of the chain
for ( DNameNode* pScan = next; pScan->next; pScan = pScan->next )
;
// And append the new node
pScan->next = pNode;
} // End of IF then
else
next = pNode;
} // End of IF
// And return self
return *this;
} // End of "DNameNode" OPERATOR '+=(DNameNode*)'
// The 'charNode' virtual functions
__near charNode::charNode ( char ch )
#if ( NO_VIRTUAL )
: DNameNode ( charNode_t )
#endif // NO_VIRTUAL
{ me = ch; }
inline int __near charNode::length () const { return 1; }
inline char __near charNode::getLastChar () const { return me; }
pchar_t __near charNode::getString ( pchar_t buf, int len ) const
{
if ( buf && len )
*buf = me;
else
buf = 0;
// Now return the character
return buf;
} // End of "charNode" FUNCTION "getString(pchar_t,int)"
// The 'pcharNode' virtual functions
inline int __near pcharNode::length () const { return myLen; }
inline char __near pcharNode::getLastChar () const { return ( myLen ? me[ myLen - 1 ] : '\0' ); }
__near pcharNode::pcharNode ( pcchar_t str, int len )
#if ( NO_VIRTUAL )
: DNameNode ( pcharNode_t )
#endif // NO_VIRTUAL
{
// Get length if not supplied
if ( !len && str )
len = strlen ( str );
// Allocate a new string buffer if valid state
if ( len && str )
{
me = gnew char[ len ];
myLen = len;
if ( me )
strncpy ( me, str, len );
} // End of IF then
else
{
me = 0;
myLen = 0;
} // End of IF else
} // End of "pcharNode" CONSTRUCTOR '(pcchar_t,int)'
pchar_t __near pcharNode::getString ( pchar_t buf, int len ) const
{
// Use the shorter of the two lengths (may not be NULL terminated)
if ( len > pcharNode::length ())
len = pcharNode::length ();
// Do the copy as appropriate
return (( me && buf && len ) ? strncpy ( buf, me, len ) : 0 );
} // End of "pcharNode" FUNCTION "getString(pchar_t,int)"
// The 'pDNameNode' virtual functions
__near pDNameNode::pDNameNode ( DName * pName )
#if ( NO_VIRTUAL )
: DNameNode ( pDNameNode_t )
#endif // NO_VIRTUAL
{ me = (( pName && (( pName->status () == DN_invalid ) || ( pName->status () == DN_error ))) ? 0 : pName ); }
inline int __near pDNameNode::length () const { return ( me ? me->length () : 0 ); }
inline char __near pDNameNode::getLastChar () const { return ( me ? me->getLastChar () : '\0' ); }
pchar_t __near pDNameNode::getString ( pchar_t buf, int len ) const
{ return (( me && buf && len ) ? me->getString ( buf, len ) : 0 ); }
// The 'DNameStatusNode' virtual functions
__near DNameStatusNode::DNameStatusNode ( DNameStatus stat )
#if ( NO_VIRTUAL )
: DNameNode ( DNameStatusNode_t )
#endif // NO_VIRTUAL
{ me = stat; myLen = (( me == DN_truncated ) ? TruncationMessageLength : 0 ); }
inline int __near DNameStatusNode::length () const { return myLen; }
inline char __near DNameStatusNode::getLastChar () const
{ return (( me == DN_truncated ) ? TruncationMessage[ TruncationMessageLength - 1 ] : '\0' ); }
pchar_t __near DNameStatusNode::getString ( pchar_t buf, int len ) const
{
// Use the shorter of the two lengths (may not be NULL terminated)
if ( len > DNameStatusNode::length ())
len = DNameStatusNode::length ();
// Do the copy as appropriate
return ((( me == DN_truncated ) && buf && len ) ? strncpy ( buf, TruncationMessage, len ) : 0 );
} // End of "DNameStatusNode" FUNCTION "getString(pchar_t,int)"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -