~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/innobase/ut/ut0vec.c

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
 
3
 
Copyright (c) 2006, 2009, Innobase Oy. All Rights Reserved.
4
 
 
5
 
This program is free software; you can redistribute it and/or modify it under
6
 
the terms of the GNU General Public License as published by the Free Software
7
 
Foundation; version 2 of the License.
8
 
 
9
 
This program is distributed in the hope that it will be useful, but WITHOUT
10
 
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
 
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
 
 
13
 
You should have received a copy of the GNU General Public License along with
14
 
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
15
 
St, Fifth Floor, Boston, MA 02110-1301 USA
16
 
 
17
 
*****************************************************************************/
18
 
 
19
 
/*******************************************************************//**
20
 
@file ut/ut0vec.c
21
 
A vector of pointers to data items
22
 
 
23
 
Created 4/6/2006 Osku Salerma
24
 
************************************************************************/
25
 
 
26
 
#include "ut0vec.h"
27
 
#ifdef UNIV_NONINL
28
 
#include "ut0vec.ic"
29
 
#endif
30
 
#include <string.h>
31
 
 
32
 
/****************************************************************//**
33
 
Create a new vector with the given initial size.
34
 
@return vector */
35
 
UNIV_INTERN
36
 
ib_vector_t*
37
 
ib_vector_create(
38
 
/*=============*/
39
 
        mem_heap_t*     heap,   /*!< in: heap */
40
 
        ulint           size)   /*!< in: initial size */
41
 
{
42
 
        ib_vector_t*    vec;
43
 
 
44
 
        ut_a(size > 0);
45
 
 
46
 
        vec = mem_heap_alloc(heap, sizeof(*vec));
47
 
 
48
 
        vec->heap = heap;
49
 
        vec->data = mem_heap_alloc(heap, sizeof(void*) * size);
50
 
        vec->used = 0;
51
 
        vec->total = size;
52
 
 
53
 
        return(vec);
54
 
}
55
 
 
56
 
/****************************************************************//**
57
 
Push a new element to the vector, increasing its size if necessary. */
58
 
UNIV_INTERN
59
 
void
60
 
ib_vector_push(
61
 
/*===========*/
62
 
        ib_vector_t*    vec,    /*!< in: vector */
63
 
        void*           elem)   /*!< in: data element */
64
 
{
65
 
        if (vec->used >= vec->total) {
66
 
                void**  new_data;
67
 
                ulint   new_total = vec->total * 2;
68
 
 
69
 
                new_data = mem_heap_alloc(vec->heap,
70
 
                                          sizeof(void*) * new_total);
71
 
                memcpy(new_data, vec->data, sizeof(void*) * vec->total);
72
 
 
73
 
                vec->data = new_data;
74
 
                vec->total = new_total;
75
 
        }
76
 
 
77
 
        vec->data[vec->used] = elem;
78
 
        vec->used++;
79
 
}