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