00001 /* 00002 * $Id$ 00003 * 00004 * Author: David Fournier 00005 * Copyright (c) 2008-2012 Regents of the University of California 00006 * 00007 * ADModelbuilder and associated libraries and documentations are 00008 * provided under the general terms of the "BSD" license. 00009 * 00010 * License: 00011 * 00012 * Redistribution and use in source and binary forms, with or without 00013 * modification, are permitted provided that the following conditions are 00014 * met: 00015 * 00016 * 1. Redistributions of source code must retain the above copyright 00017 * notice, this list of conditions and the following disclaimer. 00018 * 00019 * 2. Redistributions in binary form must reproduce the above copyright 00020 * notice, this list of conditions and the following disclaimer in the 00021 * documentation and/or other materials provided with the distribution. 00022 * 00023 * 3. Neither the name of the University of California, Otter Research, 00024 * nor the ADMB Foundation nor the names of its contributors may be used 00025 * to endorse or promote products derived from this software without 00026 * specific prior written permission. 00027 * 00028 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00029 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00030 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00031 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00032 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00033 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00034 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00035 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00036 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00037 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00038 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00039 * 00040 */ 00045 #if !defined(__DF_POOL__) 00046 #define __DF_POOL__ 00047 #include <fvar.hpp> 00048 extern void * pchecker; 00049 //#define __CHECK_MEMORY__ 00050 class link; 00051 00056 class dfpool 00057 { 00058 int dfpool_vector_flag; 00059 public: 00060 int nvar; 00061 int& on_dfpool_vector(void) {return dfpool_vector_flag;} 00062 char * last_chunk; 00063 struct link { link * next; }; 00064 int num_allocated; 00065 int num_chunks; 00066 size_t nelem; 00067 size_t size; 00068 link * head; 00069 double * first; 00070 void grow(void); 00071 #if defined(__CHECK_MEMORY__) 00072 int maxchunks; 00073 char * minaddress[100]; 00074 char * maxaddress[100]; 00075 int * pvalues; 00076 int nalloc; 00077 #endif 00078 00079 public: 00080 dfpool(); 00081 dfpool(dfpool&); // copy protection 00082 dfpool(const size_t); 00083 ~dfpool(); 00084 00085 void operator = (dfpool&); // copy protection 00086 00087 void clean(void); 00088 void set_size(const size_t); 00089 void * alloc(void); 00090 void free(void * b); 00091 void deallocate(void); 00092 #if defined(__CHECK_MEMORY__) 00093 int bad(link * p); 00094 int badaddress(link * p); 00095 void sanity_check(void); 00096 void sanity_check(void *); 00097 void sanity_check2(void); 00098 void write_pointers(int m,int max); 00099 #endif 00100 }; 00101 00106 class tsdfpool : public dfpool 00107 { 00108 public: 00109 tsdfpool(int n); 00110 void * alloc(void); 00111 void free(void * b); 00112 }; 00113 00114 #endif //defined(__DF_POOL__)
Generated on Tue Mar 8 2016 19:51:32 for ADMB Documentation by 1.8.0 |