History

Move directories from dumb subdir to project root

Tuomas Virtanen committed 10 years ago

Commit 52daae61 parent c720050114 files · +10 −8Browse files

Showing the changes to include/internal/stack_alloc.h (1 of 114 files). Show all

Unified · Split

include/internal/stack_alloc.h+113−0
@@ -0,0 +1,113 @@
1+/* Copyright (C) 2002 Jean-Marc Valin */
2+/**
3+ @file stack_alloc.h
4+ @brief Temporary memory allocation on stack
5+*/
6+/*
7+ Redistribution and use in source and binary forms, with or without
8+ modification, are permitted provided that the following conditions
9+ are met:
10+
11+ - Redistributions of source code must retain the above copyright
12+ notice, this list of conditions and the following disclaimer.
13+
14+ - Redistributions in binary form must reproduce the above copyright
15+ notice, this list of conditions and the following disclaimer in the
16+ documentation and/or other materials provided with the distribution.
17+
18+ - Neither the name of the Xiph.org Foundation nor the names of its
19+ contributors may be used to endorse or promote products derived from
20+ this software without specific prior written permission.
21+
22+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
26+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33+*/
34+
35+#ifndef STACK_ALLOC_H
36+#define STACK_ALLOC_H
37+
38+#ifdef WIN32
39+# include <malloc.h>
40+#else
41+# ifdef HAVE_ALLOCA_H
42+# include <alloca.h>
43+# else
44+# include <stdlib.h>
45+# endif
46+#endif
47+
48+/**
49+ * @def ALIGN(stack, size)
50+ *
51+ * Aligns the stack to a 'size' boundary
52+ *
53+ * @param stack Stack
54+ * @param size New size boundary
55+ */
56+
57+/**
58+ * @def PUSH(stack, size, type)
59+ *
60+ * Allocates 'size' elements of type 'type' on the stack
61+ *
62+ * @param stack Stack
63+ * @param size Number of elements
64+ * @param type Type of element
65+ */
66+
67+/**
68+ * @def VARDECL(var)
69+ *
70+ * Declare variable on stack
71+ *
72+ * @param var Variable to declare
73+ */
74+
75+/**
76+ * @def ALLOC(var, size, type)
77+ *
78+ * Allocate 'size' elements of 'type' on stack
79+ *
80+ * @param var Name of variable to allocate
81+ * @param size Number of elements
82+ * @param type Type of element
83+ */
84+
85+#ifdef ENABLE_VALGRIND
86+
87+#include <valgrind/memcheck.h>
88+
89+#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1))
90+
91+#define PUSH(stack, size, type) (VALGRIND_MAKE_NOACCESS(stack, 1000),ALIGN((stack),sizeof(type)),VALGRIND_MAKE_WRITABLE(stack, ((size)*sizeof(type))),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type))))
92+
93+#else
94+
95+#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1))
96+
97+#define PUSH(stack, size, type) (ALIGN((stack),sizeof(type)),(stack)+=((size)*sizeof(type)),(type*)((stack)-((size)*sizeof(type))))
98+
99+#endif
100+
101+#if defined(VAR_ARRAYS)
102+#define VARDECL(var)
103+#define ALLOC(var, size, type) type var[size]
104+#elif defined(USE_ALLOCA)
105+#define VARDECL(var) var
106+#define ALLOC(var, size, type) var = alloca(sizeof(type)*(size))
107+#else
108+#define VARDECL(var) var
109+#define ALLOC(var, size, type) var = PUSH(stack, size, type)
110+#endif
111+
112+
113+#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t