Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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.  
  14. #ifndef _STL_SEQUENCE_CONCEPTS_H
  15. #define _STL_SEQUENCE_CONCEPTS_H 1
  16.  
  17. #pragma GCC system_header
  18.  
  19. #include <bits/container_concepts.h>
  20.  
  21. #ifdef __STL_USE_CONCEPT_CHECKS
  22.  
  23. // This file covers the following concepts:
  24. //       _Sequence
  25. //       _FrontInsertionSequence
  26. //       _BackInsertionSequence
  27.  
  28. struct _ERROR_IN_STL_SEQ {
  29.  
  30.   template <class _XX>
  31.   static void
  32.   __fill_constructor_requirement_violation(_XX& __s) {
  33.     typename _XX::value_type __t = typename _XX::value_type();
  34.     typename _XX::difference_type __n = typename _XX::difference_type();
  35.     _XX __x(__n, __t);
  36.     __sink_unused_warning(__x);
  37.   }
  38.   template <class _XX>
  39.   static void
  40.   __fill_default_constructor_requirement_violation(_XX& __s) {
  41.     _STL_ERROR::__default_constructor_requirement_violation(*__s.begin());
  42.     typename _XX::difference_type __n = typename _XX::difference_type();
  43.     _XX __x(__n);
  44.     __sink_unused_warning(__x);
  45.   }  
  46.   template <class _XX>
  47.   static void
  48.   __range_constructor_requirement_violation(_XX& __s) {
  49.     _XX __x(__s.begin(), __s.end());
  50.     __sink_unused_warning(__x);
  51.   }
  52.   template <class _XX>
  53.   static void
  54.   __insert_function_requirement_violation(_XX& __s) {
  55.     typename _XX::value_type __t = typename _XX::value_type();
  56.     typename _XX::iterator __p = typename _XX::iterator();
  57.     __p = __s.insert(__p, __t);
  58.   }
  59.   template <class _XX>
  60.   static void
  61.   __fill_insert_function_requirement_violation(_XX& __s) {
  62.     typename _XX::value_type __t = typename _XX::value_type();
  63.     typename _XX::iterator __p = typename _XX::iterator();
  64.     typename _XX::difference_type __n = typename _XX::difference_type();
  65.     __s.insert(__p, __n, __t);
  66.   }
  67.   template <class _XX>
  68.   static void
  69.   __range_insert_function_requirement_violation(_XX& __s) {
  70.     typename _XX::iterator __p = typename _XX::iterator();
  71.     typename _XX::iterator __i = typename _XX::iterator();
  72.     typename _XX::iterator __j = typename _XX::iterator();
  73.     __s.insert(__p, __i, __j);
  74.   }
  75.   template <class _XX>
  76.   static void
  77.   __insert_element_function_requirement_violation(_XX& __s) {
  78.     typename _XX::value_type __t = typename _XX::value_type();
  79.     std::pair<typename _XX::iterator, bool> __r;
  80.     __r = __s.insert(__t);
  81.     __sink_unused_warning(__r);
  82.   }
  83.   template <class _XX>
  84.   static void
  85.   __unconditional_insert_element_function_requirement_violation(_XX& __s) {
  86.     typename _XX::value_type __t = typename _XX::value_type();
  87.     typename _XX::iterator __p;
  88.     __p = __s.insert(__t);
  89.     __sink_unused_warning(__p);
  90.   }
  91.   template <class _XX>
  92.   static void
  93.   __erase_function_requirement_violation(_XX& __s) {
  94.     typename _XX::iterator __p = typename _XX::iterator();
  95.     __p = __s.erase(__p);
  96.   }
  97.   template <class _XX>
  98.   static void
  99.   __range_erase_function_requirement_violation(_XX& __s) {
  100.     typename _XX::iterator __p = typename _XX::iterator();
  101.     typename _XX::iterator __q = typename _XX::iterator();
  102.     __p = __s.erase(__p, __q);
  103.   }
  104.   template <class _XX>
  105.   static void
  106.   __const_front_function_requirement_violation(const _XX& __s) {
  107.     typename _XX::const_reference __t = __s.front();
  108.     __sink_unused_warning(__t);
  109.   }
  110.   template <class _XX>
  111.   static void
  112.   __front_function_requirement_violation(_XX& __s) {
  113.     typename _XX::reference __t = __s.front();
  114.     __const_front_function_requirement_violation(__s);
  115.     __sink_unused_warning(__t);
  116.   }
  117.   template <class _XX>
  118.   static void
  119.   __const_back_function_requirement_violation(const _XX& __s) {
  120.     typename _XX::const_reference __t = __s.back();
  121.     __sink_unused_warning(__t);
  122.   }
  123.   template <class _XX>
  124.   static void
  125.   __back_function_requirement_violation(_XX& __s) {
  126.     typename _XX::reference __t = __s.back();
  127.     __const_back_function_requirement_violation(__s);
  128.     __sink_unused_warning(__t);
  129.   }
  130.   template <class _XX>
  131.   static void
  132.   __push_front_function_requirement_violation(_XX& __s) {
  133.     typename _XX::value_type __t = typename _XX::value_type();
  134.     __s.push_front(__t);
  135.   }
  136.   template <class _XX>
  137.   static void
  138.   __pop_front_function_requirement_violation(_XX& __s) {
  139.     __s.pop_front();
  140.   }
  141.   template <class _XX>
  142.   static void
  143.   __push_back_function_requirement_violation(_XX& __s) {
  144.     typename _XX::value_type __t = typename _XX::value_type();
  145.     __s.push_back(__t);
  146.   }
  147.   template <class _XX>
  148.   static void
  149.   __pop_back_function_requirement_violation(_XX& __s) {
  150.     __s.pop_back();
  151.   }
  152.  
  153. };
  154.  
  155. /* Sequence Containers */
  156.  
  157. template <class _Sequence>
  158. struct _Sequence_concept_specification {
  159. static void
  160. _Sequence_requirement_violation(_Sequence __s) {
  161.   // Refinement of ForwardContainer
  162.   _ForwardContainer_concept_specification<_Sequence>::_ForwardContainer_requirement_violation(__s);
  163.   // Refinement of DefaultConstructible
  164.   _DefaultConstructible_concept_specification<_Sequence>::_DefaultConstructible_requirement_violation(__s);
  165.   // Valid Expressions
  166.   _ERROR_IN_STL_SEQ::__fill_constructor_requirement_violation(__s);
  167.   _ERROR_IN_STL_SEQ::__fill_default_constructor_requirement_violation(__s);
  168.   _ERROR_IN_STL_SEQ::__range_constructor_requirement_violation(__s);
  169.   _ERROR_IN_STL_SEQ::__insert_function_requirement_violation(__s);
  170.   _ERROR_IN_STL_SEQ::__fill_insert_function_requirement_violation(__s);
  171.   _ERROR_IN_STL_SEQ::__range_insert_function_requirement_violation(__s);
  172.   _ERROR_IN_STL_SEQ::__erase_function_requirement_violation(__s);
  173.   _ERROR_IN_STL_SEQ::__range_erase_function_requirement_violation(__s);
  174.   _ERROR_IN_STL_SEQ::__front_function_requirement_violation(__s);
  175. }
  176. };
  177.  
  178. template <class _FrontInsertionSequence>
  179. struct _FrontInsertionSequence_concept_specification {
  180. static void
  181. _FrontInsertionSequence_requirement_violation(_FrontInsertionSequence __s) {
  182.   // Refinement of Sequence
  183.   _Sequence_concept_specification<_FrontInsertionSequence>::_Sequence_requirement_violation(__s);
  184.   // Valid Expressions
  185.   _ERROR_IN_STL_SEQ::__push_front_function_requirement_violation(__s);
  186.   _ERROR_IN_STL_SEQ::__pop_front_function_requirement_violation(__s);
  187. }
  188. };
  189.  
  190. template <class _BackInsertionSequence>
  191. struct _BackInsertionSequence_concept_specification {
  192. static void
  193. _BackInsertionSequence_requirement_violation(_BackInsertionSequence __s) {
  194.   // Refinement of Sequence
  195.   _Sequence_concept_specification<_BackInsertionSequence>::_Sequence_requirement_violation(__s);
  196.   // Valid Expressions
  197.   _ERROR_IN_STL_SEQ::__back_function_requirement_violation(__s);
  198.   _ERROR_IN_STL_SEQ::__push_back_function_requirement_violation(__s);
  199.   _ERROR_IN_STL_SEQ::__pop_back_function_requirement_violation(__s);
  200. }
  201. };
  202.  
  203. #endif /* if __STL_USE_CONCEPT_CHECKS */
  204.  
  205.  
  206. #endif /* _STL_SEQUENCE_CONCEPTS_H */
  207.