/usr/share/cruisecontrol-bin-2.6.1/projects/qpid-trunk/cpp/src/qpid/InlineAllocator.h

00001 #ifndef QPID_INLINEALLOCATOR_H
00002 #define QPID_INLINEALLOCATOR_H
00003 
00004 /*
00005  *
00006  * Licensed to the Apache Software Foundation (ASF) under one
00007  * or more contributor license agreements.  See the NOTICE file
00008  * distributed with this work for additional information
00009  * regarding copyright ownership.  The ASF licenses this file
00010  * to you under the Apache License, Version 2.0 (the
00011  * "License"); you may not use this file except in compliance
00012  * with the License.  You may obtain a copy of the License at
00013  * 
00014  *   http://www.apache.org/licenses/LICENSE-2.0
00015  * 
00016  * Unless required by applicable law or agreed to in writing,
00017  * software distributed under the License is distributed on an
00018  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
00019  * KIND, either express or implied.  See the License for the
00020  * specific language governing permissions and limitations
00021  * under the License.
00022  *
00023  */
00024 
00025 #include <memory>
00026 
00027 namespace qpid {
00028 
00033 template <class BaseAllocator, size_t Max> 
00034 class InlineAllocator : public BaseAllocator {
00035   public:
00036     typedef typename BaseAllocator::pointer pointer;
00037     typedef typename BaseAllocator::size_type size_type;
00038     typedef typename BaseAllocator::value_type value_type;
00039 
00040     InlineAllocator() : allocated(false) {}
00041     
00042     pointer allocate(size_type n) {
00043         if (n <= Max && !allocated) {
00044             allocated=true;
00045             return store;
00046         }
00047         else 
00048             return BaseAllocator::allocate(n, 0);
00049     }
00050 
00051     void deallocate(pointer p, size_type n) {
00052         if (p == store) allocated=false;
00053         else BaseAllocator::deallocate(p, n);
00054     }
00055 
00056     template<typename T1>
00057     struct rebind {
00058         typedef typename BaseAllocator::template rebind<T1>::other BaseOther;
00059         typedef InlineAllocator<BaseOther, Max> other;
00060     };
00061 
00062   private:
00063     value_type store[Max];
00064     bool allocated;
00065 };
00066 
00067 } // namespace qpid
00068 
00069 #endif  

Generated on Thu Apr 10 11:08:18 2008 for Qpid by  doxygen 1.4.7