1 //***************************************************************************/ 2 // This software is released under the 2-Clause BSD license, included 3 // below. 4 // 5 // Copyright (c) 2019, Aous Naman 6 // Copyright (c) 2019, Kakadu Software Pty Ltd, Australia 7 // Copyright (c) 2019, The University of New South Wales, Australia 8 // 9 // Redistribution and use in source and binary forms, with or without 10 // modification, are permitted provided that the following conditions are 11 // met: 12 // 13 // 1. Redistributions of source code must retain the above copyright 14 // notice, this list of conditions and the following disclaimer. 15 // 16 // 2. Redistributions in binary form must reproduce the above copyright 17 // notice, this list of conditions and the following disclaimer in the 18 // documentation and/or other materials provided with the distribution. 19 // 20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 21 // IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 23 // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 26 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 //***************************************************************************/ 32 // This file is part of the OpenJPH software implementation. 33 // File: ojph_mem.cpp 34 // Author: Aous Naman 35 // Date: 28 August 2019 36 //***************************************************************************/ 37 38 39 #include <new> 40 #include "ojph_mem.h" 41 42 namespace ojph { 43 44 //////////////////////////////////////////////////////////////////////////// 45 // 46 // 47 // 48 // 49 // 50 //////////////////////////////////////////////////////////////////////////// 51 52 //////////////////////////////////////////////////////////////////////////// 53 template<> finalize_alloc(mem_fixed_allocator * p)54 void line_buf::finalize_alloc<si32>(mem_fixed_allocator *p) 55 { 56 assert(p != 0 && size != 0); 57 i32 = p->post_alloc_data<si32>(size, pre_size); 58 } 59 60 //////////////////////////////////////////////////////////////////////////// 61 template<> finalize_alloc(mem_fixed_allocator * p)62 void line_buf::finalize_alloc<float>(mem_fixed_allocator *p) 63 { 64 assert(p != 0 && size != 0); 65 f32 = p->post_alloc_data<float>(size, pre_size); 66 } 67 68 //////////////////////////////////////////////////////////////////////////// 69 template<> wrap(si32 * buffer,size_t num_ele,int pre_size)70 void line_buf::wrap(si32 *buffer, size_t num_ele, int pre_size) 71 { 72 i32 = buffer; 73 this->size = num_ele; 74 this->pre_size = pre_size; 75 } 76 77 //////////////////////////////////////////////////////////////////////////// 78 template<> wrap(float * buffer,size_t num_ele,int pre_size)79 void line_buf::wrap(float *buffer, size_t num_ele, int pre_size) 80 { 81 f32 = buffer; 82 this->size = num_ele; 83 this->pre_size = pre_size; 84 } 85 86 //////////////////////////////////////////////////////////////////////////// 87 // 88 // 89 // 90 // 91 // 92 //////////////////////////////////////////////////////////////////////////// 93 94 //////////////////////////////////////////////////////////////////////////// get_buffer(int needed_bytes,coded_lists * & p)95 void mem_elastic_allocator::get_buffer(int needed_bytes, coded_lists* &p) 96 { 97 int extended_bytes = needed_bytes + (int)sizeof(coded_lists); 98 99 if (store == NULL) 100 { 101 int bytes = ojph_max(extended_bytes, chunk_size); 102 store = (stores_list*)malloc(bytes); 103 cur_store = store = new (store) stores_list(bytes); 104 total_allocated += bytes; 105 } 106 107 if (cur_store->available < extended_bytes) 108 { 109 int bytes = ojph_max(extended_bytes, chunk_size); 110 cur_store->next_store = (stores_list*)malloc(bytes); 111 cur_store = new (cur_store->next_store) stores_list(bytes); 112 total_allocated += bytes; 113 } 114 115 p = new (cur_store->data) coded_lists(needed_bytes); 116 117 cur_store->available -= extended_bytes; 118 cur_store->data += extended_bytes; 119 } 120 121 } 122