sequence.h
上传用户:nizebo
上传日期:2022-05-14
资源大小:882k
文件大小:7k
源码类别:

STL

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1999
  3.  * Silicon Graphics Computer Systems, Inc.
  4.  *
  5.  * Permission to use, copy, modify, distribute and sell this software
  6.  * and its documentation for any purpose is hereby granted without fee,
  7.  * provided that the above copyright notice appear in all copies and
  8.  * that both that copyright notice and this permission notice appear
  9.  * in supporting documentation.  Silicon Graphics makes no
  10.  * representations about the suitability of this software for any
  11.  * purpose.  It is provided "as is" without express or implied warranty.
  12.  */
  13. #ifndef STL_SEQUENCE_CONCEPTS_H
  14. #define STL_SEQUENCE_CONCEPTS_H
  15. #include <container_concepts.h>
  16. #ifdef __STL_USE_CONCEPT_CHECKS
  17. // This file covers the following concepts:
  18. //       _Sequence
  19. //       _FrontInsertionSequence
  20. //       _BackInsertionSequence
  21. struct _ERROR_IN_STL_SEQ {
  22.   template <class _XX>
  23.   static void
  24.   __fill_constructor_requirement_violation(_XX& __s) {
  25.     typename _XX::value_type __t = typename _XX::value_type();
  26.     typename _XX::difference_type __n = typename _XX::difference_type();
  27.     _XX __x(__n, __t);
  28.     __sink_unused_warning(__x);
  29.   }
  30.   template <class _XX>
  31.   static void
  32.   __fill_default_constructor_requirement_violation(_XX& __s) {
  33.     _STL_ERROR::__default_constructor_requirement_violation(*__s.begin());
  34.     typename _XX::difference_type __n = typename _XX::difference_type();
  35.     _XX __x(__n);
  36.     __sink_unused_warning(__x);
  37.   }  
  38.   template <class _XX>
  39.   static void
  40.   __range_constructor_requirement_violation(_XX& __s) {
  41.     _XX __x(__s.begin(), __s.end());
  42.     __sink_unused_warning(__x);
  43.   }
  44.   template <class _XX>
  45.   static void
  46.   __insert_function_requirement_violation(_XX& __s) {
  47.     typename _XX::value_type __t = typename _XX::value_type();
  48.     typename _XX::iterator __p = typename _XX::iterator();
  49.     __p = __s.insert(__p, __t);
  50.   }
  51.   template <class _XX>
  52.   static void
  53.   __fill_insert_function_requirement_violation(_XX& __s) {
  54.     typename _XX::value_type __t = typename _XX::value_type();
  55.     typename _XX::iterator __p = typename _XX::iterator();
  56.     typename _XX::difference_type __n = typename _XX::difference_type();
  57.     __s.insert(__p, __n, __t);
  58.   }
  59.   template <class _XX>
  60.   static void
  61.   __range_insert_function_requirement_violation(_XX& __s) {
  62.     typename _XX::iterator __p = typename _XX::iterator();
  63.     typename _XX::iterator __i = typename _XX::iterator();
  64.     typename _XX::iterator __j = typename _XX::iterator();
  65.     __s.insert(__p, __i, __j);
  66.   }
  67.   template <class _XX>
  68.   static void
  69.   __insert_element_function_requirement_violation(_XX& __s) {
  70.     typename _XX::value_type __t = typename _XX::value_type();
  71.     std::pair<typename _XX::iterator, bool> __r;
  72.     __r = __s.insert(__t);
  73.     __sink_unused_warning(__r);
  74.   }
  75.   template <class _XX>
  76.   static void
  77.   __unconditional_insert_element_function_requirement_violation(_XX& __s) {
  78.     typename _XX::value_type __t = typename _XX::value_type();
  79.     typename _XX::iterator __p;
  80.     __p = __s.insert(__t);
  81.     __sink_unused_warning(__p);
  82.   }
  83.   template <class _XX>
  84.   static void
  85.   __erase_function_requirement_violation(_XX& __s) {
  86.     typename _XX::iterator __p = typename _XX::iterator();
  87.     __p = __s.erase(__p);
  88.   }
  89.   template <class _XX>
  90.   static void
  91.   __range_erase_function_requirement_violation(_XX& __s) {
  92.     typename _XX::iterator __p = typename _XX::iterator();
  93.     typename _XX::iterator __q = typename _XX::iterator();
  94.     __p = __s.erase(__p, __q);
  95.   }
  96.   template <class _XX>
  97.   static void
  98.   __const_front_function_requirement_violation(const _XX& __s) {
  99.     typename _XX::const_reference __t = __s.front();
  100.     __sink_unused_warning(__t);
  101.   }
  102.   template <class _XX>
  103.   static void
  104.   __front_function_requirement_violation(_XX& __s) {
  105.     typename _XX::reference __t = __s.front();
  106.     __const_front_function_requirement_violation(__s);
  107.     __sink_unused_warning(__t);
  108.   }
  109.   template <class _XX>
  110.   static void
  111.   __const_back_function_requirement_violation(const _XX& __s) {
  112.     typename _XX::const_reference __t = __s.back();
  113.     __sink_unused_warning(__t);
  114.   }
  115.   template <class _XX>
  116.   static void
  117.   __back_function_requirement_violation(_XX& __s) {
  118.     typename _XX::reference __t = __s.back();
  119.     __const_back_function_requirement_violation(__s);
  120.     __sink_unused_warning(__t);
  121.   }
  122.   template <class _XX>
  123.   static void
  124.   __push_front_function_requirement_violation(_XX& __s) {
  125.     typename _XX::value_type __t = typename _XX::value_type();
  126.     __s.push_front(__t);
  127.   }
  128.   template <class _XX>
  129.   static void
  130.   __pop_front_function_requirement_violation(_XX& __s) {
  131.     __s.pop_front();
  132.   }
  133.   template <class _XX>
  134.   static void
  135.   __push_back_function_requirement_violation(_XX& __s) {
  136.     typename _XX::value_type __t = typename _XX::value_type();
  137.     __s.push_back(__t);
  138.   }
  139.   template <class _XX>
  140.   static void
  141.   __pop_back_function_requirement_violation(_XX& __s) {
  142.     __s.pop_back();
  143.   }
  144. };
  145. /* Sequence Containers */
  146. template <class _Sequence>
  147. struct _Sequence_concept_specification {
  148. static void
  149. _Sequence_requirement_violation(_Sequence __s) {
  150.   // Refinement of ForwardContainer
  151.   _ForwardContainer_concept_specification<_Sequence>::_ForwardContainer_requirement_violation(__s);
  152.   // Refinement of DefaultConstructible
  153.   _DefaultConstructible_concept_specification<_Sequence>::_DefaultConstructible_requirement_violation(__s);
  154.   // Valid Expressions
  155.   _ERROR_IN_STL_SEQ::__fill_constructor_requirement_violation(__s);
  156.   _ERROR_IN_STL_SEQ::__fill_default_constructor_requirement_violation(__s);
  157.   _ERROR_IN_STL_SEQ::__range_constructor_requirement_violation(__s);
  158.   _ERROR_IN_STL_SEQ::__insert_function_requirement_violation(__s);
  159.   _ERROR_IN_STL_SEQ::__fill_insert_function_requirement_violation(__s);
  160.   _ERROR_IN_STL_SEQ::__range_insert_function_requirement_violation(__s);
  161.   _ERROR_IN_STL_SEQ::__erase_function_requirement_violation(__s);
  162.   _ERROR_IN_STL_SEQ::__range_erase_function_requirement_violation(__s);
  163.   _ERROR_IN_STL_SEQ::__front_function_requirement_violation(__s);
  164. }
  165. };
  166. template <class _FrontInsertionSequence>
  167. struct _FrontInsertionSequence_concept_specification {
  168. static void
  169. _FrontInsertionSequence_requirement_violation(_FrontInsertionSequence __s) {
  170.   // Refinement of Sequence
  171.   _Sequence_concept_specification<_FrontInsertionSequence>::_Sequence_requirement_violation(__s);
  172.   // Valid Expressions
  173.   _ERROR_IN_STL_SEQ::__push_front_function_requirement_violation(__s);
  174.   _ERROR_IN_STL_SEQ::__pop_front_function_requirement_violation(__s);
  175. }
  176. };
  177. template <class _BackInsertionSequence>
  178. struct _BackInsertionSequence_concept_specification {
  179. static void
  180. _BackInsertionSequence_requirement_violation(_BackInsertionSequence __s) {
  181.   // Refinement of Sequence
  182.   _Sequence_concept_specification<_BackInsertionSequence>::_Sequence_requirement_violation(__s);
  183.   // Valid Expressions
  184.   _ERROR_IN_STL_SEQ::__back_function_requirement_violation(__s);
  185.   _ERROR_IN_STL_SEQ::__push_back_function_requirement_violation(__s);
  186.   _ERROR_IN_STL_SEQ::__pop_back_function_requirement_violation(__s);
  187. }
  188. };
  189. #endif /* if __STL_USE_CONCEPT_CHECKS */
  190. #endif /* STL_SEQUENCE_CONCEPTS_H */