/*ident "@(#) @(#)Pool_std.h 1.1.1.2" */ /****************************************************************************** * * C++ Standard Library * * Copyright (c) 1996 Lucent Technologies. All Rights Reserved. * * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF Lucent Technologies. * The copyright notice above does not evidence any actual or * intended publication of such source code. * ******************************************************************************/ #ifndef STDSTRINGPOOLH #define STDSTRINGPOOLH #ifndef __STDDEF_H #include #endif #include "compiler_type.h" #ifdef NAMESPACES_LUCENT namespace std { #endif class Block_header_std_LUCENT { Block_header_std_LUCENT* next; friend class Block_pool_std_LUCENT; }; class Block_pool_std_LUCENT { size_t sz; unsigned cnt; Block_header_std_LUCENT* head; Block_pool_std_LUCENT(const Block_pool_std_LUCENT&); // copy protection void operator= (const Block_pool_std_LUCENT&); // copy protection public: size_t size() const { return sz; } unsigned count() const { return cnt; } Block_pool_std_LUCENT(size_t); ~Block_pool_std_LUCENT(); char *expand(); void free(); }; class Pool_std_element_header { Pool_std_element_header *next; friend class Pool_std; }; class Pool_std: private Block_pool_std_LUCENT { size_t elsize; unsigned count; Pool_std_element_header *head; Pool_std(const Pool_std&); // copy protection void operator= (Pool_std&); // copy protection void grow(); public: Pool_std(size_t n); void *alloc() { if (!head) grow(); register Pool_std_element_header *p = head; head = p->next; return p; } void free(void *b) { register Pool_std_element_header *p = (Pool_std_element_header*) b; p->next = head; head = p; } void purge() { Block_pool_std_LUCENT::free(); head = 0; } }; #ifdef NAMESPACES_LUCENT } #endif #endif