OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / library / container / fixmemheap / fixmemheap_constructor.c
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  fixmemheap_alloc.c
5  * @brief %jp{固定サイズメモリヒープクラス}%en{fixed size memory heap class}
6  *
7  * Copyright (C) 2006-2008 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include <stdio.h>
13 #include "fixmemheap_local.h"
14
15
16
17 /** %jp{MemHeapクラス 仮想関数テーブル}%en{MemHeap class virtual function table} */
18 const static T_MEMHEAP_METHODS FixMemHeap_Methods =
19         {
20                 FixMemHeap_Alloc,                       /**< メモリの割り当て */
21                 FixMemHeap_ReAlloc,                     /**< メモリの再割り当て */
22                 FixMemHeap_Free,                        /**< メモリの開放 */
23                 FixMemHeap_GetSize,                     /**< メモリのサイズ取得 */
24                 FixMemHeap_GetAlign,            /**< メモリアライメントの取得 */
25                 FixMemHeap_AlignSize,           /**< サイズをアライメント単位に拡張 */
26         };
27
28
29
30 /** %jp{コンストラクタ} */
31 void FixMemHeap_Constructor(C_FIXMEMHEAP *self, void *pMemBase, MEMSIZE BlkSize,  MEMSIZE BlkNum)
32 {
33         void    **ppBlk;
34         void    **ppBlkNext;
35         MEMSIZE i;
36
37         /* %jp{親クラスコンストラクタ} */
38         MemHeap_Constructor(&self->MemHeap, &FixMemHeap_Methods);
39         
40         /* メンバ変数設定 */
41         self->pMemBase  = pMemBase;                             /**< %jp{メモリ先頭ブロックのアドレス} */
42         self->BlkSize   = BlkSize;                              /**< %jp{ブロックサイズ} */
43         self->BlkNum    = BlkNum;                               /**< %jp{ブロック個数} */
44         
45         /* メモリ初期化 */
46         ppBlk = (void **)self->pMemBase;
47         for ( i = 0; i < BlkNum - 1; i++ )
48         {
49                 ppBlkNext = (void **)((char *)ppBlk + BlkSize);
50                 *ppBlk    = (void *)ppBlkNext;
51                 ppBlk     = ppBlkNext;
52         }
53         *ppBlk = NULL;
54         
55         self->ppFree = (void **)self->pMemBase;
56 }
57
58
59 /* end of file */