1*38fd1498Szrj // -*- C++ -*- 2*38fd1498Szrj 3*38fd1498Szrj // Copyright (C) 2005-2018 Free Software Foundation, Inc. 4*38fd1498Szrj // 5*38fd1498Szrj // This file is part of the GNU ISO C++ Library. This library is free 6*38fd1498Szrj // software; you can redistribute it and/or modify it under the terms 7*38fd1498Szrj // of the GNU General Public License as published by the Free Software 8*38fd1498Szrj // Foundation; either version 3, or (at your option) any later 9*38fd1498Szrj // version. 10*38fd1498Szrj 11*38fd1498Szrj // This library is distributed in the hope that it will be useful, but 12*38fd1498Szrj // WITHOUT ANY WARRANTY; without even the implied warranty of 13*38fd1498Szrj // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14*38fd1498Szrj // General Public License for more details. 15*38fd1498Szrj 16*38fd1498Szrj // Under Section 7 of GPL version 3, you are granted additional 17*38fd1498Szrj // permissions described in the GCC Runtime Library Exception, version 18*38fd1498Szrj // 3.1, as published by the Free Software Foundation. 19*38fd1498Szrj 20*38fd1498Szrj // You should have received a copy of the GNU General Public License and 21*38fd1498Szrj // a copy of the GCC Runtime Library Exception along with this program; 22*38fd1498Szrj // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23*38fd1498Szrj // <http://www.gnu.org/licenses/>. 24*38fd1498Szrj 25*38fd1498Szrj // Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL. 26*38fd1498Szrj 27*38fd1498Szrj // Permission to use, copy, modify, sell, and distribute this software 28*38fd1498Szrj // is hereby granted without fee, provided that the above copyright 29*38fd1498Szrj // notice appears in all copies, and that both that copyright notice 30*38fd1498Szrj // and this permission notice appear in supporting documentation. None 31*38fd1498Szrj // of the above authors, nor IBM Haifa Research Laboratories, make any 32*38fd1498Szrj // representation about the suitability of this software for any 33*38fd1498Szrj // purpose. It is provided "as is" without express or implied 34*38fd1498Szrj // warranty. 35*38fd1498Szrj 36*38fd1498Szrj /** 37*38fd1498Szrj * @file exception.hpp 38*38fd1498Szrj * Contains exception classes. 39*38fd1498Szrj */ 40*38fd1498Szrj 41*38fd1498Szrj #ifndef PB_DS_EXCEPTION_HPP 42*38fd1498Szrj #define PB_DS_EXCEPTION_HPP 43*38fd1498Szrj 44*38fd1498Szrj #include <bits/c++config.h> 45*38fd1498Szrj #include <stdexcept> 46*38fd1498Szrj #include <cstdlib> 47*38fd1498Szrj 48*38fd1498Szrj namespace __gnu_pbds 49*38fd1498Szrj { 50*38fd1498Szrj /** 51*38fd1498Szrj * @defgroup exceptions-pbds Exceptions 52*38fd1498Szrj * @ingroup pbds 53*38fd1498Szrj * @{ 54*38fd1498Szrj */ 55*38fd1498Szrj 56*38fd1498Szrj /// Base class for exceptions. 57*38fd1498Szrj struct container_error : public std::logic_error 58*38fd1498Szrj { container_error__gnu_pbds::container_error59*38fd1498Szrj container_error() 60*38fd1498Szrj : std::logic_error(__N("__gnu_pbds::container_error")) { } 61*38fd1498Szrj }; 62*38fd1498Szrj 63*38fd1498Szrj /// An entry cannot be inserted into a container object for logical 64*38fd1498Szrj /// reasons (not, e.g., if memory is unabvailable, in which case 65*38fd1498Szrj /// the allocator_type's exception will be thrown). 66*38fd1498Szrj struct insert_error : public container_error { }; 67*38fd1498Szrj 68*38fd1498Szrj /// A join cannot be performed logical reasons (i.e., the ranges of 69*38fd1498Szrj /// the two container objects being joined overlaps. 70*38fd1498Szrj struct join_error : public container_error { }; 71*38fd1498Szrj 72*38fd1498Szrj /// A container cannot be resized. 73*38fd1498Szrj struct resize_error : public container_error { }; 74*38fd1498Szrj 75*38fd1498Szrj inline void __throw_container_error()76*38fd1498Szrj __throw_container_error() 77*38fd1498Szrj { _GLIBCXX_THROW_OR_ABORT(container_error()); } 78*38fd1498Szrj 79*38fd1498Szrj inline void __throw_insert_error()80*38fd1498Szrj __throw_insert_error() 81*38fd1498Szrj { _GLIBCXX_THROW_OR_ABORT(insert_error()); } 82*38fd1498Szrj 83*38fd1498Szrj inline void __throw_join_error()84*38fd1498Szrj __throw_join_error() 85*38fd1498Szrj { _GLIBCXX_THROW_OR_ABORT(join_error()); } 86*38fd1498Szrj 87*38fd1498Szrj inline void __throw_resize_error()88*38fd1498Szrj __throw_resize_error() 89*38fd1498Szrj { _GLIBCXX_THROW_OR_ABORT(resize_error()); } 90*38fd1498Szrj //@} 91*38fd1498Szrj } // namespace __gnu_pbds 92*38fd1498Szrj 93*38fd1498Szrj #endif 94