I волнуется всякий раз, когда я открываю любой связанный с STL код из реализации Visual Studio при отладке моего кода:
// From <xtree>
if (_Where == begin())
{ // insert at beginning if before first element
if (_DEBUG_LT_PRED(this->comp,
this->_Kfn(_Val), _Key(_Where._Mynode())))
return (_Insert(true, _Where._Mynode(), _Val));
}
else if (_Where == end())
{ // insert at end if after last element
if (_DEBUG_LT_PRED(this->comp,
_Key(_Rmost()), this->_Kfn(_Val)))
return (_Insert(false, _Rmost(), _Val));
}
//...
else if (_DEBUG_LT_PRED(this->comp,
_Key(_Where._Mynode()), this->_Kfn(_Val))
&& (++(_Next = _Where) == end()
|| _DEBUG_LT_PRED(this->comp,
this->_Kfn(_Val), _Key(_Next._Mynode()))))
{ // insert after _Where
if (_Isnil(_Right(_Where._Mynode())))
return (_Insert(false, _Where._Mynode(), _Val));
else
return (_Insert(true, _Next._Mynode(), _Val));
}
Наличие комментариев заставляет меня чувствовать, что человекнаписал их, но плохое форматирование, либеральное использование подчеркиваний в начале всего (почему?) и крайне нечитаемые условия, такие как (++(_Next = _Where) == end()
|| _DEBUG_LT_PRED ...)
, заставляют меня чувствовать, что они были сгенерированы из другого фрагмента исходного кода, а не написаны как есть.
Кто-нибудь знает, какой из этих случаев?(Если бы он был сгенерирован из какого-то другого фрагмента кода, мне было бы интересно узнать, как / почему это было сделано.)
Для записи, здесь то же самое, но «правильно отформатировано»:
if (Where == begin())
{
// insert at beginning if before first element
if (DEBUG_LT_PRED(this->comp, this->Kfn(Val), Key(Where.Mynode())))
return (Insert(true, Where.Mynode(), Val));
}
else if (Where == end())
{
// insert at end if after last element
if (DEBUG_LT_PRED(this->comp, Key(Rmost()), this->Kfn(Val)))
return (Insert(false, Rmost(), Val));
}
//...
else if (DEBUG_LT_PRED(this->comp, Key(Where.Mynode()), this->_Kfn(Val))
&& (++(Next = Where) == end()
|| DEBUG_LT_PRED(this->comp, this->_Kfn(Val), Key(Next.Mynode()))))
{
// insert after Where
if (Isnil(Right(Where.Mynode())))
return (Insert(false, Where.Mynode(), Val));
else
return (Insert(true, Next.Mynode(), Val));
}
ИМХО это больше похоже на то, как получилось бы, если бы человек написал это, но опять же, я понятия не имею.