~siretart/ubuntu/utopic/blender/libav10

« back to all changes in this revision

Viewing changes to intern/cycles/util/util_memarena.cpp

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-02-19 11:24:23 UTC
  • mfrom: (14.2.23 sid)
  • Revision ID: package-import@ubuntu.com-20140219112423-rkmaz2m7ha06d4tk
Tags: 2.69-3ubuntu1
* Merge with Debian; remaining changes:
  - Configure without OpenImageIO on armhf, as it is not available on
    Ubuntu.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright 2011, Blender Foundation.
3
 
 *
4
 
 * This program is free software; you can redistribute it and/or
5
 
 * modify it under the terms of the GNU General Public License
6
 
 * as published by the Free Software Foundation; either version 2
7
 
 * of the License, or (at your option) any later version.
8
 
 *
9
 
 * This program is distributed in the hope that it will be useful,
10
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
 * GNU General Public License for more details.
13
 
 *
14
 
 * You should have received a copy of the GNU General Public License
15
 
 * along with this program; if not, write to the Free Software Foundation,
16
 
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
 
 */
18
 
 
19
 
#include "util_foreach.h"
20
 
#include "util_math.h"
21
 
#include "util_memarena.h"
22
 
 
23
 
CCL_NAMESPACE_BEGIN
24
 
 
25
 
MemArena::MemArena(bool use_calloc_, size_t buffer_size_)
26
 
{
27
 
        use_calloc = use_calloc_;
28
 
        buffer_size = buffer_size_;
29
 
 
30
 
        last_left = 0;
31
 
        last_buffer = NULL;
32
 
}
33
 
 
34
 
MemArena::~MemArena()
35
 
{
36
 
        foreach(uint8_t *buffer, buffers)
37
 
                delete [] buffer;
38
 
}
39
 
 
40
 
void *MemArena::alloc(size_t size)
41
 
{
42
 
        if(size > last_left) {
43
 
                last_left = (size > buffer_size)? size: buffer_size;
44
 
                last_buffer = new uint8_t[last_left];
45
 
 
46
 
                if(use_calloc)
47
 
                        memset(last_buffer, 0, last_left);
48
 
 
49
 
                buffers.push_back(last_buffer);
50
 
        }
51
 
 
52
 
        uint8_t *mem = last_buffer;
53
 
 
54
 
        last_buffer += size;
55
 
        last_left -= size;
56
 
 
57
 
        return (void*)mem;
58
 
}
59
 
 
60
 
CCL_NAMESPACE_END
61