Spec-Zone .ru
спецификации, руководства, описания, API
|
ADC домой > Ссылочная библиотека> Ссылка> Дарвин> Разное пространство пользователя ссылка API
|
debug.h |
Включает: | <assert.h> <limits.h> «wx/wxchar.h» <cassert> <stddef.h> <bits/stl_iterator_base_types.h> <bits/type_traits.h> <debug/support.h> <cassert> <stddef.h> <bits/stl_iterator_base_types.h> <bits/type_traits.h> <cassert> <stddef.h> <bits/stl_iterator_base_types.h> <bits/cpp_type_traits.h> |
__ check_dereferenceable |
template<typename _Iterator, typename _Sequence> inline bool __check_dereferenceable( const _Safe_iterator<_Iterator, _Sequence>& __x)
Безопасные итераторы знают, исключительны ли они.
__ check_dereferenceable (_Iterator) |
template<typename _Iterator> inline bool __check_dereferenceable( _Iterator&)
Предположите, что некоторый произвольный итератор dereferenceable, потому что мы не можем доказать, что это не.
__ check_dereferenceable (константа _Tp *) |
template<typename _Tp> inline bool __check_dereferenceable( const _Tp*__ptr)
НЕНУЛЕВЫЕ УКАЗАТЕЛИ dereferenceable.
__ check_singular (константа _Safe_iterator _Iterator _Sequence и) |
template<typename _Iterator, typename _Sequence> inline bool __check_singular( const _Safe_iterator<_Iterator, _Sequence>& __x)
Безопасные итераторы знают, исключительны ли они.
__ check_singular (константа _Tp *) |
template<typename _Tp> inline bool __check_singular( const _Tp*__ptr)
НЕНУЛЕВЫЕ УКАЗАТЕЛИ неисключительны.
__ check_string (константа _CharT *) |
template<typename _CharT> inline const _CharT* __check_string( const _CharT*__s)
Проверки, что __ s является не-NULL и затем возвращается __ s.
__ check_string (константа _CharT *, константа _Integer и) |
template<typename _CharT, typename _Integer> inline const _CharT* __check_string( const _CharT*__s, const _Integer& __n)
Проверки, что __ s является не-NULL или __ n == 0, и затем возвращается __ s.
__ valid_range |
template<typename _Iterator, typename _Sequence> inline bool __valid_range( const _Safe_iterator<_Iterator, _Sequence>& __first, const _Safe_iterator<_Iterator, _Sequence>& __last)
Безопасные итераторы знают, как проверить, формируют ли они допустимый диапазон.
__ valid_range_aux |
template<typename _Integral> inline bool __valid_range_aux( const _Integral&, const _Integral&, __true_type)
Мы говорим, что целочисленные типы для допустимого диапазона, и подчиняются другим подпрограммам для понимания, что сделать с целочисленными типами вместо итераторов.
__ valid_range_aux2 (константа _InputIterator, константа _InputIterator, станд.::) |
template<typename _InputIterator> inline bool __valid_range_aux2( const _InputIterator&, const _InputIterator&, std::input_iterator_tag)
Не может протестировать на допустимый диапазон с входными итераторами, потому что итерация может быть разрушительной. Таким образом, мы просто предполагаем, что диапазон допустим.
__ valid_range_aux2 (константа _RandomAccessIterator и, константа _RandomAccessIterator и, станд.::) |
template<typename _RandomAccessIterator> inline bool __valid_range_aux2( const _RandomAccessIterator& __first, const _RandomAccessIterator& __last, std::random_access_iterator_tag)
Если расстояние между двумя итераторами произвольного доступа является неотрицательным, предположите, что диапазон допустим.
__ valid_range |
template<typename _InputIterator> inline bool __valid_range( const _InputIterator& __first, const _InputIterator& __last)
Не знайте то, что эти итераторы, или если они - даже итераторы (мы можем получить целочисленный тип для InputIterator), поэтому посмотрите, являются ли они неотъемлемой частью и передают их на следующую фазу иначе.
__ valid_range_aux |
template<typename _InputIterator> inline bool __valid_range_aux( const _InputIterator& __first, const _InputIterator& __last, __false_type)
У нас есть итераторы, таким образом выясните, какие итераторы, которые должны видеть, можем ли мы проверить диапазон заранее.
__ glibcxx_check_erase |
#define __glibcxx_check_erase( _Position) \ do { \ if ( ! ( _Position._M_dereferenceable( ))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_erase_bad) \ ._M_sequence( *this, "this") \ ._M_iterator( _Position, #_Position)._M_error( ); \ } while ( false); \ do { \ if ( ! ( _Position._M_attached_to( this))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_erase_different) \ ._M_sequence( *this, "this") \ ._M_iterator( _Position, #_Position)._M_error( ); \ } while ( false)
Проверьте, что мы можем стереть элемент, на который ссылается итератор _Position. Если _Position итератор dereferenceable и ссылается на эту последовательность, мы можем стереть элемент.
__ glibcxx_check_erase_range |
#define __glibcxx_check_erase_range( _First,_Last) \ __glibcxx_check_valid_range( _First,_Last); \ do { \ if ( ! ( _First._M_attached_to( this))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_erase_different) \ ._M_sequence( *this, "this") \ ._M_iterator( _First, #_First) \ ._M_iterator( _Last, #_Last)._M_error( ); \ } while ( false)
Проверьте, что мы можем стереть элементы в диапазоне итератора [_First, _Last). Мы можем стереть элементы, если [_First, _Last), допустимый диапазон итератора в этой последовательности.
__ glibcxx_check_heap_pred |
#define __glibcxx_check_heap_pred( _First,_Last,_Pred) \ __glibcxx_check_valid_range( _First,_Last); \ do { \ if ( ! ( ::std::__is_heap( _First, _Last, _Pred))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_not_heap_pred) \ ._M_iterator( _First, #_First) \ ._M_iterator( _Last, #_Last) \ ._M_string( #_Pred)._M_error( ); \ } while ( false)
Проверьте, что диапазон итератора [_First, _Last), «куча» w.r.t. предикат _Pred.
__ glibcxx_check_insert |
#define __glibcxx_check_insert( _Position) \ do { \ if ( ! ( !_Position._M_singular( ))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_insert_singular) \ ._M_sequence( *this, "this") \ ._M_iterator( _Position, #_Position)._M_error( ); \ } while ( false); \ do { \ if ( ! ( _Position._M_attached_to( this))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_insert_different) \ ._M_sequence( *this, "this") \ ._M_iterator( _Position, #_Position)._M_error( ); \ } while ( false)
Проверьте, что мы можем вставить в *это с итератором _Position. Вставка в контейнер в определенной позиции требует, чтобы итератор был неисключителен (т.е. или dereferenceable или прошлый конец), и что это ссылается на последовательность, в которую мы вставляем. Обратите внимание на то, что этот макрос только допустим, когда контейнер является _Safe_sequence, и итератор является _Safe_iterator.
__ glibcxx_check_insert_range |
#define __glibcxx_check_insert_range( _Position,_First,_Last) \ __glibcxx_check_valid_range( _First,_Last); \ do { \ if ( ! ( !_Position._M_singular( ))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_insert_singular) \ ._M_sequence( *this, "this") \ ._M_iterator( _Position, #_Position)._M_error( ); \ } while ( false); \ do { \ if ( ! ( _Position._M_attached_to( this))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_insert_different) \ ._M_sequence( *this, "this") \ ._M_iterator( _Position, #_Position)._M_error( ); \ } while ( false)
Проверьте, что мы можем вставить значения в диапазон итератора [_First, _Last) в *это с итератором _Position. Вставка в контейнер в определенной позиции требует, чтобы итератор был неисключителен (т.е. или dereferenceable или прошлый конец), что это ссылается на последовательность, которую мы вставляем в, и что диапазон итератора [_First, В последний раз), допустимое (возможно пустой) диапазон. Обратите внимание на то, что этот макрос только допустим, когда контейнер является _Safe_sequence, и итератор является _Safe_iterator.
@tbd, который Мы хотели бы проверить на невмешательство _Position и диапазона [_First, _Last), но это не может (в целом) быть сделано.
__ glibcxx_check_partitioned |
#define __glibcxx_check_partitioned( _First,_Last,_Value) \ __glibcxx_check_valid_range( _First,_Last); \ do { \ if ( ! ( ::__gnu_debug::__check_partitioned( _First, _Last, \ _Value))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_unpartitioned) \ ._M_iterator( _First, #_First) \ ._M_iterator( _Last, #_Last) \ ._M_string( #_Value)._M_error( ); \ } while ( false)
Проверьте, что диапазон итератора [_First, _Last), делится w.r.t. значение _Value.
__ glibcxx_check_partitioned_pred |
#define __glibcxx_check_partitioned_pred( _First,_Last,_Value,_Pred) \ __glibcxx_check_valid_range( _First,_Last); \ do { \ if ( ! ( ::__gnu_debug::__check_partitioned( _First, _Last, \ _Value, _Pred))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_unpartitioned_pred) \ ._M_iterator( _First, #_First) \ ._M_iterator( _Last, #_Last) \ ._M_string( #_Pred) \ ._M_string( #_Value)._M_error( ); \ } while ( false)
Проверьте, что диапазон итератора [_First, _Last), делится w.r.t. значение _Value и предикат _Pred.
__ glibcxx_check_sorted_pred |
#define __glibcxx_check_sorted_pred( _First,_Last,_Pred) \ __glibcxx_check_valid_range( _First,_Last); \ __glibcxx_check_strict_weak_ordering_pred( _First,_Last,_Pred); \ do { \ if ( ! ( ::__gnu_debug::__check_sorted( _First, _Last, _Pred))) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ . \ _M_message( ::__gnu_debug::__msg_unsorted_pred) \ ._M_iterator( _First, #_First) \ ._M_iterator( _Last, #_Last) \ ._M_string( #_Pred)._M_error( ); \ } while ( false)
Проверьте, что диапазон итератора [_First, _Last), сортируется предикатом _Pred.
_GLIBCXX_DEBUG_VERIFY |
#define _GLIBCXX_DEBUG_VERIFY( _Condition,_ErrorMessage) \ do { \ if ( ! ( _Condition)) \ ::__gnu_debug::_Error_formatter::_M_at( __FILE__, __LINE__) \ ._ErrorMessage._M_error( ); \ } while ( false)
Макросы, используемые реализацией для проверки определенных свойств. Они макросы могут только использоваться непосредственно обертками отладки. Обратите внимание на то, что это макросы (вместо, более очевидно, «корректного» выбора создания их функции), потому что нам нужны строка и информация о файле на сайте вызова, для минимизации расстояния между пользовательской ошибкой и где сообщают об ошибке.
Последнее обновление: 20.06.2006