Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

HeapSlice.d

Go to the documentation of this file.
00001 /*******************************************************************************
00002 
00003         @file HeapSlice.d
00004         
00005         Copyright (C) 2004 Kris Bell
00006         
00007         This software is provided 'as-is', without any express or implied
00008         warranty. In no event will the authors be held liable for damages
00009         of any kind arising from the use of this software.
00010         
00011         Permission is hereby granted to anyone to use this software for any 
00012         purpose, including commercial applications, and to alter it and/or 
00013         redistribute it freely, subject to the following restrictions:
00014         
00015         1. The origin of this software must not be misrepresented; you must 
00016            not claim that you wrote the original software. If you use this 
00017            software in a product, an acknowledgment within documentation of 
00018            said product would be appreciated but is not required.
00019 
00020         2. Altered source versions must be plainly marked as such, and must 
00021            not be misrepresented as being the original software.
00022 
00023         3. This notice may not be removed or altered from any distribution
00024            of the source.
00025 
00026 
00027                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00028 
00029 
00030         @version        Initial version, October 2004      
00031         @author         Kris
00032 
00033 
00034 *******************************************************************************/
00035 
00036 module mango.utils.HeapSlice;
00037 
00038 /*******************************************************************************
00039         
00040 *******************************************************************************/
00041 
00042 class HeapSlice
00043 {
00044         private uint    used;
00045         private void[]  buffer;
00046 
00047         /***********************************************************************
00048         
00049                 Create with the specified starting size
00050 
00051         ***********************************************************************/
00052 
00053         this (uint size)
00054         {
00055                 buffer = new void[size];
00056         }
00057 
00058         /***********************************************************************
00059         
00060                 Reset content length to zero
00061 
00062         ***********************************************************************/
00063 
00064         void reset ()
00065         {
00066                 used = 0;
00067         }
00068 
00069         /***********************************************************************
00070         
00071                 Potentially expand the content space, and return a pointer
00072                 to the start of the empty section.
00073 
00074         ***********************************************************************/
00075 
00076         void* expand (uint size)
00077         {
00078                 if ((used + size) > buffer.length)
00079                      buffer.length = (used + size) * 2;
00080                 return &buffer [used];
00081         }
00082 
00083         /***********************************************************************
00084         
00085                 Return a slice of the content from the current position 
00086                 with the specified size. Adjusts the current position to 
00087                 point at an empty zone.
00088 
00089         ***********************************************************************/
00090 
00091         void[] slice (int size)
00092         {
00093                 uint i = used;
00094                 used += size;
00095                 return buffer [i..used];
00096         }
00097 }
00098 
00099 

Generated on Sun Nov 7 19:06:51 2004 for Mango by doxygen 1.3.6