1 /** 2 * The exception module defines all system-level exceptions and provides a 3 * mechanism to alter system-level error handling. 4 * 5 * Copyright: 6 * Copyright (C) 2005-2006 Sean Kelly, Kris Bell. 7 * Some parts copyright (c) 2009-2016 dunnhumby Germany GmbH. 8 * All rights reserved. 9 * 10 * License: 11 * Tango Dual License: 3-Clause BSD License / Academic Free License v3.0. 12 * See LICENSE_TANGO.txt for details. 13 * 14 * Authors: Sean Kelly, Kris Bell 15 * 16 */ 17 module ocean.core.ExceptionDefinitions; 18 19 import ocean.meta.types.Qualifiers; 20 21 //////////////////////////////////////////////////////////////////////////////// 22 /* 23 - Exception 24 - OutOfMemoryException 25 - SwitchException 26 - AssertException 27 - ArrayBoundsException 28 - FinalizeException 29 30 - PlatformException 31 - ProcessException 32 - ThreadException 33 - FiberException 34 - ThreadPoolException 35 - SyncException 36 - IOException 37 - SocketException 38 - VfsException 39 - ClusterException 40 41 - NoSuchElementException 42 - CorruptedIteratorException 43 44 - IllegalArgumentException 45 - IllegalElementException 46 47 - TextException 48 - XmlException 49 - RegexException 50 - LocaleException 51 - UnicodeException 52 53 - PayloadException 54 */ 55 //////////////////////////////////////////////////////////////////////////////// 56 57 58 public import core.exception; 59 60 import core.thread; 61 alias core.thread.ThreadException ThreadException; 62 63 /** 64 * Base class for operating system or library exceptions. 65 */ 66 class PlatformException : Exception 67 { 68 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 69 { 70 super(msg, file, line); 71 } 72 } 73 74 75 /** 76 * Base class for ThreadPoolException 77 */ 78 class ThreadPoolException : Exception 79 { 80 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 81 { 82 super(msg, file, line); 83 } 84 } 85 86 87 /** 88 * Base class for synchronization exceptions. 89 */ 90 class SyncException : PlatformException 91 { 92 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 93 { 94 super(msg, file, line); 95 } 96 } 97 98 99 100 /** 101 * The basic exception thrown by the ocean.io package. One should try to ensure 102 * that all Tango exceptions related to IO are derived from this one. 103 */ 104 class IOException : PlatformException 105 { 106 /******************************************************************* 107 108 Constructor 109 110 Params: 111 msg = message description of the error (uses stderr if empty) 112 file = file where exception is thrown 113 line = line where exception is thrown 114 115 *******************************************************************/ 116 117 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 118 { 119 super(msg, file, line); 120 } 121 122 /******************************************************************* 123 124 Constructor 125 126 Params: 127 msg = message description of the error (uses stderr if empty) 128 error_num = error code 129 func_name = name of the method that failed 130 file = file where exception is thrown 131 line = line where exception is thrown 132 133 *******************************************************************/ 134 135 public this ( istring msg, int error_num, istring func_name, 136 istring file = __FILE__, long line = __LINE__ ) 137 { 138 super(msg, file, line); 139 140 this.error_num = error_num; 141 this.func_name = func_name; 142 this.line = line; 143 this.file = file; 144 } 145 146 /******************************************************************* 147 148 Error code 149 150 *******************************************************************/ 151 152 protected int error_num; 153 154 /******************************************************************* 155 156 Last failed function name. 157 158 *******************************************************************/ 159 160 protected istring func_name; 161 162 /******************************************************************* 163 164 Returns: 165 error code of the exception 166 167 *******************************************************************/ 168 169 public int errorNumber () 170 { 171 return this.error_num; 172 } 173 174 /******************************************************************* 175 176 Returns: 177 function name where the exception is thrown 178 179 *******************************************************************/ 180 181 public istring failedFunctionName () 182 { 183 return this.func_name; 184 } 185 } 186 187 /** 188 * The basic exception thrown by the ocean.io.vfs package. 189 */ 190 class VfsException : IOException 191 { 192 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 193 { 194 super(msg, file, line); 195 } 196 } 197 198 /** 199 * The basic exception thrown by the ocean.io.cluster package. 200 */ 201 class ClusterException : IOException 202 { 203 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 204 { 205 super(msg, file, line); 206 } 207 } 208 209 /** 210 * Base class for socket exceptions. 211 */ 212 class SocketException : IOException 213 { 214 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 215 { 216 super(msg, file, line); 217 } 218 } 219 220 221 /** 222 * Base class for exception thrown by an InternetHost. 223 */ 224 class HostException : IOException 225 { 226 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 227 { 228 super(msg, file, line); 229 } 230 } 231 232 233 /** 234 * Base class for exceptiond thrown by an Address. 235 */ 236 class AddressException : IOException 237 { 238 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 239 { 240 super(msg, file, line); 241 } 242 } 243 244 245 /** 246 * Thrown when a socket failed to accept an incoming connection. 247 */ 248 class SocketAcceptException : SocketException 249 { 250 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 251 { 252 super(msg, file, line); 253 } 254 } 255 256 /** 257 * Thrown on a process error. 258 */ 259 class ProcessException : PlatformException 260 { 261 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 262 { 263 super(msg, file, line); 264 } 265 } 266 267 268 /** 269 * Represents a text processing error. 270 */ 271 class TextException : Exception 272 { 273 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 274 { 275 super(msg, file, line); 276 } 277 } 278 279 280 /** 281 * Base class for regluar expression exceptions. 282 */ 283 class RegexException : TextException 284 { 285 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 286 { 287 super(msg, file, line); 288 } 289 } 290 291 292 /** 293 * Base class for locale exceptions. 294 */ 295 class LocaleException : TextException 296 { 297 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 298 { 299 super(msg, file, line); 300 } 301 } 302 303 304 /** 305 * Base class for XML exceptions. 306 */ 307 class XmlException : TextException 308 { 309 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 310 { 311 super(msg, file, line); 312 } 313 } 314 315 316 /** 317 * RegistryException is thrown when the NetworkRegistry encounters a 318 * problem during proxy registration, or when it sees an unregistered 319 * guid. 320 */ 321 class RegistryException : Exception 322 { 323 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 324 { 325 super(msg, file, line); 326 } 327 } 328 329 330 /** 331 * Thrown when an illegal argument is encountered. 332 */ 333 class IllegalArgumentException : Exception 334 { 335 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 336 { 337 super(msg, file, line); 338 } 339 } 340 341 342 /** 343 * 344 * IllegalElementException is thrown by Collection methods 345 * that add (or replace) elements (and/or keys) when their 346 * arguments are null or do not pass screeners. 347 * 348 */ 349 class IllegalElementException : IllegalArgumentException 350 { 351 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 352 { 353 super(msg, file, line); 354 } 355 } 356 357 358 /** 359 * Thrown on past-the-end errors by iterators and containers. 360 */ 361 class NoSuchElementException : Exception 362 { 363 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 364 { 365 super(msg, file, line); 366 } 367 } 368 369 370 /** 371 * Thrown when a corrupt iterator is detected. 372 */ 373 class CorruptedIteratorException : NoSuchElementException 374 { 375 this( istring msg, istring file = __FILE__, long line = __LINE__ ) 376 { 377 super(msg, file, line); 378 } 379 }