diff lphobos/std/stdint.d @ 1:c53b6e3fe49a trunk

[svn r5] Initial commit. Most things are very rough.
author lindquist
date Sat, 01 Sep 2007 21:43:27 +0200
parents
children eef8ac26c66c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lphobos/std/stdint.d	Sat Sep 01 21:43:27 2007 +0200
@@ -0,0 +1,177 @@
+
+/**
+ *
+	D constrains integral types to specific sizes. But efficiency
+	of different sizes varies from machine to machine,
+	pointer sizes vary, and the maximum integer size varies.
+	<b>stdint</b> offers a portable way of trading off size
+	vs efficiency, in a manner compatible with the <tt>stdint.h</tt>
+	definitions in C.
+
+	The exact aliases are types of exactly the specified number of bits.
+	The at least aliases are at least the specified number of bits
+	large, and can be larger.
+	The fast aliases are the fastest integral type supported by the
+	processor that is at least as wide as the specified number of bits.
+
+	The aliases are:
+
+	<table border=1 cellspacing=0 cellpadding=5>
+	<th>Exact Alias
+	<th>Description
+	<th>At Least Alias
+	<th>Description
+	<th>Fast Alias
+	<th>Description
+	<tr>
+	<td>int8_t
+	<td>exactly 8 bits signed
+	<td>int_least8_t
+	<td>at least 8 bits signed
+	<td>int_fast8_t
+	<td>fast 8 bits signed
+	<tr>
+	<td>uint8_t
+	<td>exactly 8 bits unsigned
+	<td>uint_least8_t
+	<td>at least 8 bits unsigned
+	<td>uint_fast8_t
+	<td>fast 8 bits unsigned
+
+	<tr>
+	<td>int16_t
+	<td>exactly 16 bits signed
+	<td>int_least16_t
+	<td>at least 16 bits signed
+	<td>int_fast16_t
+	<td>fast 16 bits signed
+	<tr>
+	<td>uint16_t
+	<td>exactly 16 bits unsigned
+	<td>uint_least16_t
+	<td>at least 16 bits unsigned
+	<td>uint_fast16_t
+	<td>fast 16 bits unsigned
+
+	<tr>
+	<td>int32_t
+	<td>exactly 32 bits signed
+	<td>int_least32_t
+	<td>at least 32 bits signed
+	<td>int_fast32_t
+	<td>fast 32 bits signed
+	<tr>
+	<td>uint32_t
+	<td>exactly 32 bits unsigned
+	<td>uint_least32_t
+	<td>at least 32 bits unsigned
+	<td>uint_fast32_t
+	<td>fast 32 bits unsigned
+
+	<tr>
+	<td>int64_t
+	<td>exactly 64 bits signed
+	<td>int_least64_t
+	<td>at least 64 bits signed
+	<td>int_fast64_t
+	<td>fast 64 bits signed
+	<tr>
+	<td>uint64_t
+	<td>exactly 64 bits unsigned
+	<td>uint_least64_t
+	<td>at least 64 bits unsigned
+	<td>uint_fast64_t
+	<td>fast 64 bits unsigned
+	</table>
+
+	The ptr aliases are integral types guaranteed to be large enough
+	to hold a pointer without losing bits:
+
+	<table border=1 cellspacing=0 cellpadding=5>
+	<th>Alias
+	<th>Description
+	<tr>
+	<td>intptr_t
+	<td>signed integral type large enough to hold a pointer
+	<tr>
+	<td>uintptr_t
+	<td>unsigned integral type large enough to hold a pointer
+	</table>
+
+	The max aliases are the largest integral types:
+
+	<table border=1 cellspacing=0 cellpadding=5>
+	<th>Alias
+	<th>Description
+	<tr>
+	<td>intmax_t
+	<td>the largest signed integral type
+	<tr>
+	<td>uintmax_t
+	<td>the largest unsigned integral type
+	</table>
+
+ * Authors: Walter Bright, www.digitalmars.com
+ * License: Public Domain
+ * Macros:
+ *	WIKI=Phobos/StdStdint
+ */
+
+/*
+    NOTE: This file has been patched from the original DMD distribution to
+    work with the LLVMDC compiler.
+
+    Modified by Tomas Lindquist Olsen, August 2007
+*/
+
+module std.stdint;
+
+/* Exact sizes */
+
+alias  byte   int8_t;
+alias ubyte  uint8_t;
+alias  short  int16_t;
+alias ushort uint16_t;
+alias  int    int32_t;
+alias uint   uint32_t;
+alias  long   int64_t;
+alias ulong  uint64_t;
+
+/* At least sizes */
+
+alias  byte   int_least8_t;
+alias ubyte  uint_least8_t;
+alias  short  int_least16_t;
+alias ushort uint_least16_t;
+alias  int    int_least32_t;
+alias uint   uint_least32_t;
+alias  long   int_least64_t;
+alias ulong  uint_least64_t;
+
+/* Fastest minimum width sizes */
+
+alias  byte  int_fast8_t;
+alias ubyte uint_fast8_t;
+alias  int   int_fast16_t;
+alias uint  uint_fast16_t;
+alias  int   int_fast32_t;
+alias uint  uint_fast32_t;
+alias  long  int_fast64_t;
+alias ulong uint_fast64_t;
+
+/* Integer pointer holders */
+
+version(LLVM64) {
+    alias long   intptr_t;
+    alias ulong uintptr_t;
+}
+else {
+    alias int   intptr_t;
+    alias uint uintptr_t;
+}
+
+/* Greatest width integer types */
+
+alias  long  intmax_t;
+alias ulong uintmax_t;
+