OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [services/] [memalloc/] [common/] [v2_0/] [include/] [memjoin.hxx] - Blame information for rev 587

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
#ifndef CYGONCE_MEMALLOC_MEMJOIN_HXX
2
#define CYGONCE_MEMALLOC_MEMJOIN_HXX
3
 
4
//==========================================================================
5
//
6
//      memjoin.hxx
7
//
8
//      Pseudo memory pool used to join together other memory pools
9
//
10
//==========================================================================
11
//####ECOSGPLCOPYRIGHTBEGIN####
12
// -------------------------------------------
13
// This file is part of eCos, the Embedded Configurable Operating System.
14
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
15
//
16
// eCos is free software; you can redistribute it and/or modify it under
17
// the terms of the GNU General Public License as published by the Free
18
// Software Foundation; either version 2 or (at your option) any later version.
19
//
20
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
21
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
22
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
23
// for more details.
24
//
25
// You should have received a copy of the GNU General Public License along
26
// with eCos; if not, write to the Free Software Foundation, Inc.,
27
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
28
//
29
// As a special exception, if other files instantiate templates or use macros
30
// or inline functions from this file, or you compile this file and link it
31
// with other works to produce a work based on this file, this file does not
32
// by itself cause the resulting work to be covered by the GNU General Public
33
// License. However the source code for this file must still be made available
34
// in accordance with section (3) of the GNU General Public License.
35
//
36
// This exception does not invalidate any other reasons why a work based on
37
// this file might be covered by the GNU General Public License.
38
//
39
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
40
// at http://sources.redhat.com/ecos/ecos-license/
41
// -------------------------------------------
42
//####ECOSGPLCOPYRIGHTEND####
43
//==========================================================================
44
//#####DESCRIPTIONBEGIN####
45
//
46
// Author(s):    jlarmour
47
// Contributors:
48
// Date:         2000-06-12
49
// Purpose:      Define joined up memory pool class interface
50
// Description:  Inline class for constructing a pseudo allocator that contains
51
//               multiple other allocators. It caters solely to the requirements
52
//               of the malloc implementation.
53
// Usage:        #include 
54
//
55
//
56
//####DESCRIPTIONEND####
57
//
58
//==========================================================================
59
 
60
// CONFIGURATION
61
 
62
#include 
63
 
64
// INCLUDES
65
 
66
#include         // types
67
//#include          // assertion macros
68
 
69
#include      // Common memory allocator infra
70
 
71
 
72
// TYPE DEFINITIONS
73
 
74
template 
75
class Cyg_Mempool_Joined
76
{
77
protected:
78
    struct pooldesc {
79
        const cyg_uint8 *startaddr;
80
        const cyg_uint8 *endaddr;
81
        T *pool;
82
    };
83
    struct pooldesc *pools;
84
    cyg_uint8 poolcount;
85
 
86
    T *
87
    find_pool_for_ptr( const cyg_uint8 * /* ptr */ );
88
 
89
public:
90
    // Constructor
91
    Cyg_Mempool_Joined( cyg_uint8 /* num_heaps */, T * /* heaps */[] );
92
 
93
    // Destructor
94
    ~Cyg_Mempool_Joined();
95
 
96
    // get some memory, return NULL if none available
97
    cyg_uint8 *
98
    try_alloc( cyg_int32 /* size */ );
99
 
100
    // resize existing allocation, if oldsize is non-NULL, previous
101
    // allocation size is placed into it. If previous size not available,
102
    // it is set to 0. NB previous allocation size may have been rounded up.
103
    // Occasionally the allocation can be adjusted *backwards* as well as,
104
    // or instead of forwards, therefore the address of the resized
105
    // allocation is returned, or NULL if no resizing was possible.
106
    // Note that this differs from ::realloc() in that no attempt is
107
    // made to call malloc() if resizing is not possible - that is left
108
    // to higher layers. The data is copied from old to new though.
109
    // The effects of alloc_ptr==NULL or newsize==0 are undefined
110
    cyg_uint8 *
111
    resize_alloc( cyg_uint8 * /* alloc_ptr */, cyg_int32 /* newsize */,
112
                  cyg_int32 * /* oldsize */ =NULL );
113
 
114
    // free the memory back to the pool
115
    // returns true on success
116
    cyg_bool
117
    free( cyg_uint8 * /* ptr */, cyg_int32 /* size */ =0 );
118
 
119
    // Get memory pool status
120
    // flags is a bitmask of requested fields to fill in. The flags are
121
    // defined in common.hxx
122
    void
123
    get_status( cyg_mempool_status_flag_t /* flags */,
124
                Cyg_Mempool_Status & /* status */ );
125
 
126
};
127
 
128
#include 
129
 
130
#endif // ifndef CYGONCE_MEMALLOC_MEMJOIN_HXX
131
// EOF memjoin.hxx

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.