From: ryuz Date: Mon, 24 Aug 2009 19:44:18 +0000 (+0000) Subject: (none) X-Git-Url: http://git.osdn.net/view?p=hos%2Fhos-v4a.git;a=commitdiff_plain;h=493b98694ba21a78a67530ff41a702dd1270abd7 (none) --- diff --git a/aplfw/build/common/gmake/aplfwdep.inc b/aplfw/build/common/gmake/aplfwdep.inc index 30a4659..ad83e80 100755 --- a/aplfw/build/common/gmake/aplfwdep.inc +++ b/aplfw/build/common/gmake/aplfwdep.inc @@ -193,6 +193,7 @@ $(OBJS_DIR)/valmemheap_free.$(EXT_OBJ): $(VALMEMHEAP_DIR)/valmemheap_free.c $(CO $(OBJS_DIR)/valmemheap_getalign.$(EXT_OBJ): $(VALMEMHEAP_DIR)/valmemheap_getalign.c $(COMMON_HEADERS) $(OBJS_DIR)/valmemheap_getsize.$(EXT_OBJ): $(VALMEMHEAP_DIR)/valmemheap_getsize.c $(COMMON_HEADERS) $(OBJS_DIR)/valmemheap_alignsize.$(EXT_OBJ): $(VALMEMHEAP_DIR)/valmemheap_alignsize.c $(COMMON_HEADERS) +$(OBJS_DIR)/valmemheap_ismember.$(EXT_OBJ): $(VALMEMHEAP_DIR)/valmemheap_ismember.c $(COMMON_HEADERS) $(OBJS_DIR)/fixmemheap_create.$(EXT_OBJ): $(FIXMEMHEAP_DIR)/fixmemheap_create.c $(COMMON_HEADERS) $(OBJS_DIR)/fixmemheap_delete.$(EXT_OBJ): $(FIXMEMHEAP_DIR)/fixmemheap_delete.c $(COMMON_HEADERS) $(OBJS_DIR)/fixmemheap_constructor.$(EXT_OBJ): $(FIXMEMHEAP_DIR)/fixmemheap_constructor.c $(COMMON_HEADERS) @@ -202,6 +203,18 @@ $(OBJS_DIR)/fixmemheap_free.$(EXT_OBJ): $(FIXMEMHEAP_DIR)/fixmemheap_free.c $(CO $(OBJS_DIR)/fixmemheap_getalign.$(EXT_OBJ): $(FIXMEMHEAP_DIR)/fixmemheap_getalign.c $(COMMON_HEADERS) $(OBJS_DIR)/fixmemheap_getsize.$(EXT_OBJ): $(FIXMEMHEAP_DIR)/fixmemheap_getsize.c $(COMMON_HEADERS) $(OBJS_DIR)/fixmemheap_alignsize.$(EXT_OBJ): $(FIXMEMHEAP_DIR)/fixmemheap_alignsize.c $(COMMON_HEADERS) +$(OBJS_DIR)/fixmemheap_ismember.$(EXT_OBJ): $(FIXMEMHEAP_DIR)/fixmemheap_ismember.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_alignsize.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_alignsize.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_alloc.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_alloc.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_constructor.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_constructor.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_create.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_create.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_delete.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_delete.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_destructor.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_destructor.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_free.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_free.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_getalign.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_getalign.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_getsize.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_getsize.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_realloc.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_realloc.c $(COMMON_HEADERS) +$(OBJS_DIR)/automemheap_searchheap.$(EXT_OBJ): $(AUTOMEMHEAP_DIR)/automemheap_searchheap.c $(COMMON_HEADERS) $(OBJS_DIR)/assoc_create.$(EXT_OBJ): $(ASSOC_DIR)/assoc_create.c $(COMMON_HEADERS) $(OBJS_DIR)/assoc_createex.$(EXT_OBJ): $(ASSOC_DIR)/assoc_createex.c $(COMMON_HEADERS) $(OBJS_DIR)/assoc_delete.$(EXT_OBJ): $(ASSOC_DIR)/assoc_delete.c $(COMMON_HEADERS) diff --git a/aplfw/build/common/gmake/aplfwsrc.inc b/aplfw/build/common/gmake/aplfwsrc.inc index f3000f4..4a23af1 100755 --- a/aplfw/build/common/gmake/aplfwsrc.inc +++ b/aplfw/build/common/gmake/aplfwsrc.inc @@ -27,6 +27,7 @@ LINK_COMMAND ?= Yes # Librarys LINK_VALMEMHEAP ?= Yes LINK_FIXMEMHEAP ?= Yes +LINK_AUTOMEMHEAP ?= Yes LINK_ASSOC ?= Yes LINK_LIST ?= Yes LINK_STREAMBUF ?= Yes @@ -358,6 +359,7 @@ CSRCS += $(VALMEMHEAP_DIR)/valmemheap_free.c CSRCS += $(VALMEMHEAP_DIR)/valmemheap_getalign.c CSRCS += $(VALMEMHEAP_DIR)/valmemheap_getsize.c CSRCS += $(VALMEMHEAP_DIR)/valmemheap_alignsize.c +CSRCS += $(VALMEMHEAP_DIR)/valmemheap_ismember.c endif @@ -374,6 +376,25 @@ CSRCS += $(FIXMEMHEAP_DIR)/fixmemheap_free.c CSRCS += $(FIXMEMHEAP_DIR)/fixmemheap_getalign.c CSRCS += $(FIXMEMHEAP_DIR)/fixmemheap_getsize.c CSRCS += $(FIXMEMHEAP_DIR)/fixmemheap_alignsize.c +CSRCS += $(FIXMEMHEAP_DIR)/fixmemheap_ismember.c +endif + + +# Auto size memory heap +ifeq ($(LINK_AUTOMEMHEAP),Yes) +AUTOMEMHEAP_DIR = $(HOSAPLFW_DIR)/library/container/automemheap +SRC_DIRS += $(AUTOMEMHEAP_DIR) +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_alignsize.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_alloc.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_constructor.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_create.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_delete.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_destructor.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_free.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_getalign.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_getsize.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_realloc.c +CSRCS += $(AUTOMEMHEAP_DIR)/automemheap_searchheap.c endif diff --git a/aplfw/build/common/nmake/aplfwdep.inc b/aplfw/build/common/nmake/aplfwdep.inc index 703249a..34b5d18 100755 --- a/aplfw/build/common/nmake/aplfwdep.inc +++ b/aplfw/build/common/nmake/aplfwdep.inc @@ -690,6 +690,9 @@ $(OBJS_DIR)\valmemheap_getsize.c : $(VALMEMHEAP_DIR)\valmemheap_getsize.c $(OBJS_DIR)\valmemheap_alignsize.c : $(VALMEMHEAP_DIR)\valmemheap_alignsize.c $(CMD_CP) $(VALMEMHEAP_DIR)\valmemheap_alignsize.c $(OBJS_DIR)\ +$(OBJS_DIR)\valmemheap_ismember.c : $(VALMEMHEAP_DIR)\valmemheap_ismember.c + $(CMD_CP) $(VALMEMHEAP_DIR)\valmemheap_ismember.c $(OBJS_DIR)\ + $(OBJS_DIR)\fixmemheap.h : $(FIXMEMHEAP_DIR)\fixmemheap.h $(CMD_CP) $(FIXMEMHEAP_DIR)\fixmemheap.h $(OBJS_DIR)\ @@ -724,6 +727,49 @@ $(OBJS_DIR)\fixmemheap_getsize.c : $(FIXMEMHEAP_DIR)\fixmemheap_getsize.c $(OBJS_DIR)\fixmemheap_alignsize.c : $(FIXMEMHEAP_DIR)\fixmemheap_alignsize.c $(CMD_CP) $(FIXMEMHEAP_DIR)\fixmemheap_alignsize.c $(OBJS_DIR)\ +$(OBJS_DIR)\fixmemheap_ismember.c : $(FIXMEMHEAP_DIR)\fixmemheap_ismember.c + $(CMD_CP) $(FIXMEMHEAP_DIR)\fixmemheap_ismember.c $(OBJS_DIR)\ + + +$(OBJS_DIR)\automemheap.h : $(AUTOMEMHEAP_DIR)\automemheap.h + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap.h $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_local.h : $(AUTOMEMHEAP_DIR)\automemheap_local.h + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_local.h $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_alignsize.c : $(AUTOMEMHEAP_DIR)\automemheap_alignsize.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_alignsize.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_alloc.c : $(AUTOMEMHEAP_DIR)\automemheap_alloc.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_alloc.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_constructor.c : $(AUTOMEMHEAP_DIR)\automemheap_constructor.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_constructor.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_create.c : $(AUTOMEMHEAP_DIR)\automemheap_create.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_create.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_delete.c : $(AUTOMEMHEAP_DIR)\automemheap_delete.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_delete.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_destructor.c : $(AUTOMEMHEAP_DIR)\automemheap_destructor.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_destructor.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_free.c : $(AUTOMEMHEAP_DIR)\automemheap_free.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_free.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_getalign.c : $(AUTOMEMHEAP_DIR)\automemheap_getalign.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_getalign.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_getsize.c : $(AUTOMEMHEAP_DIR)\automemheap_getsize.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_getsize.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_realloc.c : $(AUTOMEMHEAP_DIR)\automemheap_realloc.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_realloc.c $(OBJS_DIR)\ + +$(OBJS_DIR)\automemheap_searchheap.c : $(AUTOMEMHEAP_DIR)\automemheap_searchheap.c + $(CMD_CP) $(AUTOMEMHEAP_DIR)\automemheap_searchheap.c $(OBJS_DIR)\ + $(OBJS_DIR)\assoc.h : $(ASSOC_DIR)\assoc.h $(CMD_CP) $(ASSOC_DIR)\assoc.h $(OBJS_DIR)\ @@ -2275,6 +2321,7 @@ $(OBJS_DIR)\valmemheap_free.$(EXT_OBJ): $(OBJS_DIR)\valmemheap_free.c $(COMMON_H $(OBJS_DIR)\valmemheap_getalign.$(EXT_OBJ): $(OBJS_DIR)\valmemheap_getalign.c $(COMMON_HEADERS) $(OBJS_DIR)\valmemheap_getsize.$(EXT_OBJ): $(OBJS_DIR)\valmemheap_getsize.c $(COMMON_HEADERS) $(OBJS_DIR)\valmemheap_alignsize.$(EXT_OBJ): $(OBJS_DIR)\valmemheap_alignsize.c $(COMMON_HEADERS) +$(OBJS_DIR)\valmemheap_ismember.$(EXT_OBJ): $(OBJS_DIR)\valmemheap_ismember.c $(COMMON_HEADERS) $(OBJS_DIR)\fixmemheap_create.$(EXT_OBJ): $(OBJS_DIR)\fixmemheap_create.c $(COMMON_HEADERS) $(OBJS_DIR)\fixmemheap_delete.$(EXT_OBJ): $(OBJS_DIR)\fixmemheap_delete.c $(COMMON_HEADERS) @@ -2285,6 +2332,19 @@ $(OBJS_DIR)\fixmemheap_free.$(EXT_OBJ): $(OBJS_DIR)\fixmemheap_free.c $(COMMON_H $(OBJS_DIR)\fixmemheap_getalign.$(EXT_OBJ): $(OBJS_DIR)\fixmemheap_getalign.c $(COMMON_HEADERS) $(OBJS_DIR)\fixmemheap_getsize.$(EXT_OBJ): $(OBJS_DIR)\fixmemheap_getsize.c $(COMMON_HEADERS) $(OBJS_DIR)\fixmemheap_alignsize.$(EXT_OBJ): $(OBJS_DIR)\fixmemheap_alignsize.c $(COMMON_HEADERS) +$(OBJS_DIR)\fixmemheap_ismember.$(EXT_OBJ): $(OBJS_DIR)\fixmemheap_ismember.c $(COMMON_HEADERS) + +$(OBJS_DIR)\automemheap_alignsize.$(EXT_OBJ): $(OBJS_DIR)\automemheap_alignsize.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_alloc.$(EXT_OBJ): $(OBJS_DIR)\automemheap_alloc.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_constructor.$(EXT_OBJ): $(OBJS_DIR)\automemheap_constructor.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_create.$(EXT_OBJ): $(OBJS_DIR)\automemheap_create.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_delete.$(EXT_OBJ): $(OBJS_DIR)\automemheap_delete.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_destructor.$(EXT_OBJ): $(OBJS_DIR)\automemheap_destructor.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_free.$(EXT_OBJ): $(OBJS_DIR)\automemheap_free.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_getalign.$(EXT_OBJ): $(OBJS_DIR)\automemheap_getalign.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_getsize.$(EXT_OBJ): $(OBJS_DIR)\automemheap_getsize.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_realloc.$(EXT_OBJ): $(OBJS_DIR)\automemheap_realloc.c $(COMMON_HEADERS) +$(OBJS_DIR)\automemheap_searchheap.$(EXT_OBJ): $(OBJS_DIR)\automemheap_searchheap.c $(COMMON_HEADERS) $(OBJS_DIR)\assoc_create.$(EXT_OBJ): $(OBJS_DIR)\assoc_create.c $(COMMON_HEADERS) $(OBJS_DIR)\assoc_createex.$(EXT_OBJ): $(OBJS_DIR)\assoc_createex.c $(COMMON_HEADERS) diff --git a/aplfw/build/common/nmake/aplfwsrc.inc b/aplfw/build/common/nmake/aplfwsrc.inc index bf37b44..1ee3f2c 100755 --- a/aplfw/build/common/nmake/aplfwsrc.inc +++ b/aplfw/build/common/nmake/aplfwsrc.inc @@ -51,6 +51,9 @@ LINK_VALMEMHEAP = Yes !ifndef LINK_FIXMEMHEAP LINK_FIXMEMHEAP = Yes !endif +!ifndef LINK_AUTOMEMHEAP +LINK_AUTOMEMHEAP = Yes +!endif !ifndef LINK_ASSOC LINK_ASSOC = Yes !endif @@ -687,6 +690,8 @@ CSRCS = $(CSRCS) $(VALMEMHEAP_DIR)\valmemheap_getsize.c OBJS = $(OBJS) $(OBJS_DIR)\valmemheap_getsize.$(EXT_OBJ) CSRCS = $(CSRCS) $(VALMEMHEAP_DIR)\valmemheap_alignsize.c OBJS = $(OBJS) $(OBJS_DIR)\valmemheap_alignsize.$(EXT_OBJ) +CSRCS = $(CSRCS) $(VALMEMHEAP_DIR)\valmemheap_ismember.c +OBJS = $(OBJS) $(OBJS_DIR)\valmemheap_ismember.$(EXT_OBJ) !endif @@ -713,6 +718,38 @@ CSRCS = $(CSRCS) $(FIXMEMHEAP_DIR)\fixmemheap_getsize.c OBJS = $(OBJS) $(OBJS_DIR)\fixmemheap_getsize.$(EXT_OBJ) CSRCS = $(CSRCS) $(FIXMEMHEAP_DIR)\fixmemheap_alignsize.c OBJS = $(OBJS) $(OBJS_DIR)\fixmemheap_alignsize.$(EXT_OBJ) +CSRCS = $(CSRCS) $(FIXMEMHEAP_DIR)\fixmemheap_ismember.c +OBJS = $(OBJS) $(OBJS_DIR)\fixmemheap_ismember.$(EXT_OBJ) +!endif + + +# Auto size memory heap +!if "$(LINK_AUTOMEMHEAP)" == "Yes" +AUTOMEMHEAP_DIR = $(HOSAPLFW_DIR)\library\container\automemheap +HEADERS = $(HEADERS) $(OBJS_DIR)\automemheap.h +HEADERS = $(HEADERS) $(OBJS_DIR)\automemheap_local.h +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_alignsize.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_alignsize.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_alloc.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_alloc.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_constructor.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_constructor.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_create.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_create.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_delete.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_delete.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_destructor.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_destructor.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_free.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_free.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_getalign.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_getalign.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_getsize.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_getsize.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_realloc.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_realloc.$(EXT_OBJ) +CSRCS = $(CSRCS) $(AUTOMEMHEAP_DIR)\automemheap_searchheap.c +OBJS = $(OBJS) $(OBJS_DIR)\automemheap_searchheap.$(EXT_OBJ) !endif diff --git a/aplfw/build/common/tmp_mkinc/mk_inc.pl b/aplfw/build/common/tmp_mkinc/mk_inc.pl index e0fa3da..fb10803 100755 --- a/aplfw/build/common/tmp_mkinc/mk_inc.pl +++ b/aplfw/build/common/tmp_mkinc/mk_inc.pl @@ -350,6 +350,7 @@ "valmemheap_getalign.c", "valmemheap_getsize.c", "valmemheap_alignsize.c", + "valmemheap_ismember.c", ] ], [ @@ -372,6 +373,31 @@ "fixmemheap_getalign.c", "fixmemheap_getsize.c", "fixmemheap_alignsize.c", + "fixmemheap_ismember.c", + ] + ], + [ + "Auto size memory heap", + "\$(COMMON_HEADERS)", + "\$(HOSAPLFW_DIR)/library/container/automemheap", + "AUTOMEMHEAP", + "Yes", + [ + "automemheap.h", + "automemheap_local.h", + ], + [ + "automemheap_alignsize.c", + "automemheap_alloc.c", + "automemheap_constructor.c", + "automemheap_create.c", + "automemheap_delete.c", + "automemheap_destructor.c", + "automemheap_free.c", + "automemheap_getalign.c", + "automemheap_getsize.c", + "automemheap_realloc.c", + "automemheap_searchheap.c", ] ], [ diff --git a/aplfw/build/win/win32/vc2008/hosaplfw.vcproj b/aplfw/build/win/win32/vc2008/hosaplfw.vcproj index aa13701..e88d709 100755 --- a/aplfw/build/win/win32/vc2008/hosaplfw.vcproj +++ b/aplfw/build/win/win32/vc2008/hosaplfw.vcproj @@ -1222,6 +1222,170 @@ > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "automemheap_local.h" + + + +/** サイズをアライメント単位に拡張 */ +MEMSIZE AutoMemHeap_AlignSize(void *pMemHeap, MEMSIZE Size) +{ + C_AUTOMEMHEAP *self; + + /* upper cast */ + self = (C_AUTOMEMHEAP *)pMemHeap; + + return MemHeap_AlignSize(self->pMemHeap, Size); +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_alloc.c b/aplfw/library/container/automemheap/automemheap_alloc.c new file mode 100755 index 0000000..b4e4fd0 --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_alloc.c @@ -0,0 +1,114 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_alloc.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "automemheap_local.h" + + + +/** %jp{メモリの割り当て} */ +void *AutoMemHeap_Alloc(void *pMemHeap, MEMSIZE Size) +{ + C_AUTOMEMHEAP *self; + void *pMem; + int i; + + /* upper cast */ + self = (C_AUTOMEMHEAP *)pMemHeap; + + if ( Size <= self->FixSize ) + { + T_AUTOMEMHEAP_FIX *pFixHeap; + + /* 固定サイズプールから取る */ + for ( i = 0, pFixHeap = self->pFixList; pFixHeap != NULL; pFixHeap = pFixHeap->pNext, i++ ) + { + if ( (pMem = FixMemHeap_Alloc(&pFixHeap->FixMemHeap, Size)) != NULL ) + { + return pMem; + } + i++; + } + + /* 新規確保 */ + if ( i < self->iFixMax ) + { + if ( (pFixHeap = MemHeap_Alloc(self->pMemHeap, sizeof(T_AUTOMEMHEAP_FIX) + (self->FixSize * self->FixNum))) != NULL ) + { + pMem = (void *)((char *)pFixHeap + sizeof(T_AUTOMEMHEAP_FIX)); + FixMemHeap_Constructor(&pFixHeap->FixMemHeap, pMem, self->FixSize, self->FixNum); + + /* リストに追加 */ + pFixHeap->pNext = self->pFixList; + self->pFixList = pFixHeap; + + if ( (pMem = FixMemHeap_Alloc(&pFixHeap->FixMemHeap, Size)) != NULL ) + { + return pMem; + } + } + } + } + else if ( Size < self->ValSize ) + { + T_AUTOMEMHEAP_VAL *pValHeap; + + /* 可変サイズプールから取る */ + for ( i = 0, pValHeap = self->pValList; pValHeap != NULL; pValHeap = pValHeap->pNext, i++ ) + { + if ( (pMem = ValMemHeap_Alloc(&pValHeap->ValMemHeap, Size)) != NULL ) + { + return pMem; + } + i++; + } + + /* 新規確保 */ + if ( i < self->iValMax ) + { + if ( (pValHeap = MemHeap_Alloc(self->pMemHeap, sizeof(T_AUTOMEMHEAP_VAL) + self->ValSize)) != NULL ) + { + pMem = (void *)((char *)pValHeap + sizeof(T_AUTOMEMHEAP_VAL)); + ValMemHeap_Constructor(&pValHeap->ValMemHeap, pMem, self->ValSize, MemHeap_AlignSize(self->pMemHeap, 1)); + + /* リストに追加 */ + pValHeap->pNext = self->pValList; + self->pValList = pValHeap; + + if ( (pMem = ValMemHeap_Alloc(&pValHeap->ValMemHeap, Size)) != NULL ) + { + return pMem; + } + } + } + } + + /* 直接取る */ + { + T_AUTOMEMHEAP_MEM *pMemHeap; + + if ( (pMemHeap = MemHeap_Alloc(self->pMemHeap, MemHeap_AlignSize(self->pMemHeap, sizeof(T_AUTOMEMHEAP_MEM)) + Size)) != NULL ) + { + pMem = (void *)((char *)pMemHeap + MemHeap_AlignSize(self->pMemHeap, sizeof(T_AUTOMEMHEAP_MEM))); + + /* リストに追加 */ + pMemHeap->pNext = self->pMemList; + self->pMemList = pMemHeap; + + return pMem; + } + } + + return NULL; +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_constructor.c b/aplfw/library/container/automemheap/automemheap_constructor.c new file mode 100755 index 0000000..19bb5dc --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_constructor.c @@ -0,0 +1,49 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_alloc.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "automemheap_local.h" + + + +/** %jp{MemHeapクラス 仮想関数テーブル}%en{MemHeap class virtual function table} */ +const static T_MEMHEAP_METHODS AutoMemHeap_Methods = + { + AutoMemHeap_Alloc, /**< メモリの割り当て */ + AutoMemHeap_ReAlloc, /**< メモリの再割り当て */ + AutoMemHeap_Free, /**< メモリの開放 */ + AutoMemHeap_GetSize, /**< メモリのサイズ取得 */ + AutoMemHeap_GetAlign, /**< メモリアライメントの取得 */ + AutoMemHeap_AlignSize, /**< サイズをアライメント単位に拡張 */ + }; + + + +/** %jp{コンストラクタ} */ +void AutoMemHeap_Constructor(C_AUTOMEMHEAP *self, C_MEMHEAP *pMemHeap) +{ + /* %jp{親クラスコンストラクタ} */ + MemHeap_Constructor(&self->MemHeap, &AutoMemHeap_Methods); + + /* メンバ変数設定 */ + self->pValList = NULL; + self->pFixList = NULL; + self->pMemList = NULL; + + self->ValSize = 4096; + self->FixSize = MemHeap_AlignSize(&self->MemHeap, 16); + self->FixNum = 4096 / self->FixSize; + self->iValMax = 16; + self->iFixMax = 16; +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_create.c b/aplfw/library/container/automemheap/automemheap_create.c new file mode 100755 index 0000000..7115c38 --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_create.c @@ -0,0 +1,36 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_alloc.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "hosaplfw.h" +#include "automemheap_local.h" + + + +/** 生成 */ +C_AUTOMEMHEAP *AutoMemHeap_Create(C_MEMHEAP *pMemHeap) +{ + C_AUTOMEMHEAP *self; + + /* メモリ確保 */ + if ( (self = (C_AUTOMEMHEAP *)MemHeap_Alloc(pMemHeap, sizeof(C_AUTOMEMHEAP))) == NULL ) + { + return NULL; + } + + /* コンストラクタ呼び出し */ + AutoMemHeap_Constructor(self, pMemHeap); + + return (HANDLE)self; +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_delete.c b/aplfw/library/container/automemheap/automemheap_delete.c new file mode 100755 index 0000000..c38a138 --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_delete.c @@ -0,0 +1,29 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_delete.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2009 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "hosaplfw.h" +#include "automemheap_local.h" + + + +/** 削除 */ +void AutoMemHeap_Delete(C_AUTOMEMHEAP *self) +{ + /* デストラクタ呼び出し */ + AutoMemHeap_Destructor(self); + + /* メモリ削除 */ + Memory_Free(self); +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_destructor.c b/aplfw/library/container/automemheap/automemheap_destructor.c new file mode 100755 index 0000000..7ae9d94 --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_destructor.c @@ -0,0 +1,50 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_free.c + * @brief %jp{固定サイズメモリヒープクラス}%en{fixed size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "automemheap_local.h" + + +/** デストラクタ */ +void AutoMemHeap_Destructor(C_AUTOMEMHEAP *self) +{ + T_AUTOMEMHEAP_FIX *pFixHeap; + T_AUTOMEMHEAP_FIX *pFixHeapNext; + T_AUTOMEMHEAP_VAL *pValHeap; + T_AUTOMEMHEAP_VAL *pValHeapNext; + T_AUTOMEMHEAP_MEM *pMemHeap; + T_AUTOMEMHEAP_MEM *pMemHeapNext; + + + /* 固定長メモリヒープ開放 */ + for ( pFixHeap = self->pFixList; pFixHeap != NULL; pFixHeap = pFixHeapNext ) + { + pFixHeapNext = pFixHeap->pNext; + MemHeap_Free(self->pMemHeap, pFixHeap); + } + + /* 可変長メモリヒープに無いか探索 */ + for ( pValHeap = self->pValList; pValHeap != NULL; pValHeap = pValHeapNext ) + { + pValHeapNext = pValHeap->pNext; + MemHeap_Free(self->pMemHeap, pValHeap); + } + + /* 基底ヒープに開放 */ + for ( pMemHeap = self->pMemList; pMemHeap != NULL; pMemHeap = pMemHeapNext ) + { + pMemHeapNext = pMemHeap->pNext; + MemHeap_Free(self->pMemHeap, pMemHeap); + } +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_free.c b/aplfw/library/container/automemheap/automemheap_free.c new file mode 100755 index 0000000..c8e36bd --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_free.c @@ -0,0 +1,37 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_free.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "automemheap_local.h" + + + +/** %jp{メモリの解放} */ +void AutoMemHeap_Free(void *pMemHeap, void *pMem) +{ + C_AUTOMEMHEAP *self; + C_MEMHEAP *pHeap; + + /* upper cast */ + self = (C_AUTOMEMHEAP *)pMemHeap; + + if ( (pHeap = AutoMemHeap_SearchHeap(self, pMem)) != NULL ) + { + MemHeap_Free(pHeap, pMem); + } + else + { + MemHeap_Free(self->pMemHeap, (void *)((char *)pMem - MemHeap_AlignSize(self->pMemHeap, sizeof(T_AUTOMEMHEAP_MEM)))); + } +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_getalign.c b/aplfw/library/container/automemheap/automemheap_getalign.c new file mode 100755 index 0000000..7d38a8a --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_getalign.c @@ -0,0 +1,28 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_free.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2009 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "automemheap_local.h" + + +/** メモリアライメントの取得 */ +MEMSIZE AutoMemHeap_GetAlign(void *pMemHeap) +{ + C_AUTOMEMHEAP *self; + + /* upper cast */ + self = (C_AUTOMEMHEAP *)pMemHeap; + + return MemHeap_GetAlign(self->pMemHeap); +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_getsize.c b/aplfw/library/container/automemheap/automemheap_getsize.c new file mode 100755 index 0000000..d0212659 --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_getsize.c @@ -0,0 +1,39 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_free.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "automemheap_local.h" + + + +/** メモリのサイズ取得 */ +MEMSIZE AutoMemHeap_GetSize(void *pMemHeap, void *pMem) +{ + C_AUTOMEMHEAP *self; + C_MEMHEAP *pHeap; + + /* upper cast */ + self = (C_AUTOMEMHEAP *)pMemHeap; + + if ( (pHeap = AutoMemHeap_SearchHeap(self, pMem)) != NULL ) + { + MemHeap_GetSize(pHeap, pMem); + } + else + { + MemHeap_GetSize(self->pMemHeap, (void *)((char *)pMem - MemHeap_AlignSize(self->pMemHeap, sizeof(T_AUTOMEMHEAP_MEM)))); + } + + return 0; +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_local.h b/aplfw/library/container/automemheap/automemheap_local.h new file mode 100755 index 0000000..136a94b --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_local.h @@ -0,0 +1,86 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_local.h + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#ifndef __HOS__automemheap_local_h__ +#define __HOS__automemheap_local_h__ + + +#include "library/container/memheap/memheap_local.h" +#include "library/container/valmemheap/valmemheap_local.h" +#include "library/container/fixmemheap/fixmemheap_local.h" + + +typedef struct t_automemheap_fix +{ + struct t_automemheap_fix *pNext; + C_FIXMEMHEAP FixMemHeap; +} T_AUTOMEMHEAP_FIX; + +typedef struct t_automemheap_val +{ + struct t_automemheap_val *pNext; + C_VALMEMHEAP ValMemHeap; +} T_AUTOMEMHEAP_VAL; + +typedef struct t_automemheap_mem +{ + struct t_automemheap_mem *pNext; +} T_AUTOMEMHEAP_MEM; + + +/** %jp{AutoMemHeapクラス}%en{AutoMemHeap class} */ +typedef struct c_automemheap +{ + C_MEMHEAP MemHeap; /**< 継承 */ + + C_MEMHEAP *pMemHeap; /**< 基底ヒープ */ + + T_AUTOMEMHEAP_FIX *pFixList; /**< 小ブロック用固定サイズヒープリスト */ + T_AUTOMEMHEAP_VAL *pValList; /**< 中ブロック用可変サイズヒープリスト */ + T_AUTOMEMHEAP_MEM *pMemList; /**< 大ブロック用リスト */ + + MEMSIZE FixSize; /**< 小ブロック閾値 */ + MEMSIZE FixNum; /**< 小ブロック個数 */ + MEMSIZE ValSize; /**< 中ブロック閾値 */ + + int iFixMax; + int iValMax; +} C_AUTOMEMHEAP; + + +#ifdef __cplusplus +extern "C" { +#endif + +void AutoMemHeap_Constructor(C_AUTOMEMHEAP *self, C_MEMHEAP *pMemHeap); /**< コンストラクタ */ +void AutoMemHeap_Destructor(C_AUTOMEMHEAP *self); /**< デストラクタ */ + +void *AutoMemHeap_Alloc(void *pMemHeap, MEMSIZE Size); /**< メモリの割り当て */ +void *AutoMemHeap_ReAlloc(void *pMemHeap, void *pMem, MEMSIZE Size); /**< メモリの再割り当て */ +void AutoMemHeap_Free(void *pMemHeap, void *pMem); /**< メモリの開放 */ +MEMSIZE AutoMemHeap_GetSize(void *pMemHeap, void *pMem); /**< メモリのサイズ取得 */ +MEMSIZE AutoMemHeap_GetAlign(void *pMemHeap); /**< メモリアライメントの取得 */ +MEMSIZE AutoMemHeap_AlignSize(void *pMemHeap, MEMSIZE Size); /**< サイズをアライメント単位に拡張 */ +int AutoMemHeap_IsMember(void *pMemHeap, void *pMem); /**< サイズをアライメント単位に拡張 */ + +C_MEMHEAP *AutoMemHeap_SearchHeap(C_AUTOMEMHEAP *self, void *pMem); /**< 所属するヒープを検索 */ + +#ifdef __cplusplus +} +#endif + + + +#endif /* __HOS__automemheap_local_h__ */ + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_realloc.c b/aplfw/library/container/automemheap/automemheap_realloc.c new file mode 100755 index 0000000..55af466 --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_realloc.c @@ -0,0 +1,25 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_alloc.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include +#include "automemheap_local.h" + + + +/** %jp{メモリの再割り当て} */ +void *AutoMemHeap_ReAlloc(void *pMemHeap, void *pMem, MEMSIZE Size) +{ + return NULL; +} + + +/* end of file */ diff --git a/aplfw/library/container/automemheap/automemheap_searchheap.c b/aplfw/library/container/automemheap/automemheap_searchheap.c new file mode 100755 index 0000000..2ced1b1 --- /dev/null +++ b/aplfw/library/container/automemheap/automemheap_searchheap.c @@ -0,0 +1,44 @@ +/** + * Hyper Operating System Application Framework + * + * @file automemheap_free.c + * @brief %jp{メモリヒープクラス}%en{auto size memory heap class} + * + * Copyright (C) 2006-2009 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "automemheap_local.h" + + +/** 所属するヒープを検索 */ +C_MEMHEAP *AutoMemHeap_SearchHeap(C_AUTOMEMHEAP *self, void *pMem) +{ + T_AUTOMEMHEAP_FIX *pFixHeap; + T_AUTOMEMHEAP_VAL *pValHeap; + + /* 固定長メモリヒープに無いか探索 */ + for ( pFixHeap = self->pFixList; pFixHeap != NULL; pFixHeap = pFixHeap->pNext ) + { + if ( FixMemHeap_IsMember(&pFixHeap->FixMemHeap, pMem) ) + { + return &pFixHeap->FixMemHeap.MemHeap; + } + } + + /* 可変長メモリヒープに無いか探索 */ + for ( pValHeap = self->pValList; pValHeap != NULL; pValHeap = pValHeap->pNext ) + { + if ( ValMemHeap_IsMember(&pValHeap->ValMemHeap, pMem) ) + { + return &pValHeap->ValMemHeap.MemHeap; + } + } + + return NULL; +} + + +/* end of file */ diff --git a/aplfw/library/container/fixmemheap/fixmemheap_constructor.c b/aplfw/library/container/fixmemheap/fixmemheap_constructor.c index dc23f6e..8e9b20a 100755 --- a/aplfw/library/container/fixmemheap/fixmemheap_constructor.c +++ b/aplfw/library/container/fixmemheap/fixmemheap_constructor.c @@ -23,6 +23,7 @@ const static T_MEMHEAP_METHODS FixMemHeap_Methods = FixMemHeap_GetSize, /**< メモリのサイズ取得 */ FixMemHeap_GetAlign, /**< メモリアライメントの取得 */ FixMemHeap_AlignSize, /**< サイズをアライメント単位に拡張 */ + FixMemHeap_IsMember, /**< メモリがヒープに属しているかチェック */ }; diff --git a/aplfw/library/container/fixmemheap/fixmemheap_ismember.c b/aplfw/library/container/fixmemheap/fixmemheap_ismember.c new file mode 100755 index 0000000..796605e --- /dev/null +++ b/aplfw/library/container/fixmemheap/fixmemheap_ismember.c @@ -0,0 +1,34 @@ +/** + * Hyper Operating System Application Framework + * + * @file fixmemheap_ismember.c + * @brief %jp{固定サイズメモリヒープクラス}%en{fixed size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "fixmemheap_local.h" + + +/** メモリがヒープに属しているかチェック */ +int FixMemHeap_IsMember(void *pMemHeap, void *pMem) +{ + C_FIXMEMHEAP *self; + + /* upper cast */ + self = (C_FIXMEMHEAP *)pMemHeap; + + /* %jp{ポインタ範囲チェック} */ + if ( pMem < (void *)self->pMemBase || pMem >= (void *)((char *)self->pMemBase + (self->BlkSize * self->BlkNum)) ) + { + return 0; + } + + return 1; +} + + +/* end of file */ diff --git a/aplfw/library/container/fixmemheap/fixmemheap_local.h b/aplfw/library/container/fixmemheap/fixmemheap_local.h index 46ed806..0ff7957 100755 --- a/aplfw/library/container/fixmemheap/fixmemheap_local.h +++ b/aplfw/library/container/fixmemheap/fixmemheap_local.h @@ -44,6 +44,7 @@ void FixMemHeap_Free(void *pMemHeap, void *pMem); /**< メモリの開放 * MEMSIZE FixMemHeap_GetSize(void *pMemHeap, void *pMem); /**< メモリのサイズ取得 */ MEMSIZE FixMemHeap_GetAlign(void *pMemHeap); /**< メモリアライメントの取得 */ MEMSIZE FixMemHeap_AlignSize(void *pMemHeap, MEMSIZE Size); /**< サイズをアライメント単位に拡張 */ +int FixMemHeap_IsMember(void *pMemHeap, void *pMem); /**< メモリがヒープに属しているかチェック */ #ifdef __cplusplus } diff --git a/aplfw/library/container/memheap/memheap.h b/aplfw/library/container/memheap/memheap.h index b6abf8d..9320856 100755 --- a/aplfw/library/container/memheap/memheap.h +++ b/aplfw/library/container/memheap/memheap.h @@ -27,7 +27,7 @@ typedef struct t_memheap_methods MEMSIZE (*pfncGetSize)(void *pMemHeap, void *pMem); /**< メモリのサイズ取得 */ MEMSIZE (*pfncGetAlign)(void *pMemHeap); /**< メモリアライメントの取得 */ MEMSIZE (*pfncAlignSize)(void *pMemHeap, MEMSIZE Size); /**< サイズをアライメント単位に拡張 */ - + int (*pfncIsMember)(void *pMemHeap, void *pMem); /**< メモリがヒープに属しているかチェック */ } T_MEMHEAP_METHODS; @@ -49,6 +49,7 @@ extern "C" { #define MemHeap_GetSize(self, pMem) ((self)->pMethods->pfncGetSize((self), (pMem))) #define MemHeap_GetAlign(self) ((self)->pMethods->pfncGetAlign((self))) #define MemHeap_AlignSize(self, Size) ((self)->pMethods->pfncAlignSize((self), (Size))) +#define MemHeap_IsMember(self, pMem) ((self)->pMethods->pfncIsMember((self), (pMem))) #ifdef __cplusplus } diff --git a/aplfw/library/container/valmemheap/valmemheap_constructor.c b/aplfw/library/container/valmemheap/valmemheap_constructor.c index 0e1809b..f5c43a1 100755 --- a/aplfw/library/container/valmemheap/valmemheap_constructor.c +++ b/aplfw/library/container/valmemheap/valmemheap_constructor.c @@ -23,6 +23,7 @@ const static T_MEMHEAP_METHODS ValMemHeap_Methods = ValMemHeap_GetSize, /**< メモリのサイズ取得 */ ValMemHeap_GetAlign, /**< メモリアライメントの取得 */ ValMemHeap_AlignSize, /**< サイズをアライメント単位に拡張 */ + ValMemHeap_IsMember, /**< メモリがヒープに属しているかチェック */ }; diff --git a/aplfw/library/container/valmemheap/valmemheap_ismember.c b/aplfw/library/container/valmemheap/valmemheap_ismember.c new file mode 100755 index 0000000..c9851b7 --- /dev/null +++ b/aplfw/library/container/valmemheap/valmemheap_ismember.c @@ -0,0 +1,34 @@ +/** + * Hyper Operating System Application Framework + * + * @file valmemheap_free.c + * @brief %jp{可変サイズメモリヒープクラス}%en{variable size memory heap class} + * + * Copyright (C) 2006-2008 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#include +#include "valmemheap_local.h" + + +/** メモリがヒープに属しているかチェック */ +int ValMemHeap_IsMember(void *pMemHeap, void *pMem) +{ + C_VALMEMHEAP *self; + + /* upper cast */ + self = (C_VALMEMHEAP *)pMemHeap; + + /* %jp{ポインタ範囲チェック} */ + if ( pMem < (void *)self->pMemBase || pMem >= (void *)((char *)self->pMemBase + self->MemSize) ) + { + return 0; + } + + return 1; +} + + +/* end of file */ diff --git a/aplfw/library/container/valmemheap/valmemheap_local.h b/aplfw/library/container/valmemheap/valmemheap_local.h index 744715a..5942cd9 100755 --- a/aplfw/library/container/valmemheap/valmemheap_local.h +++ b/aplfw/library/container/valmemheap/valmemheap_local.h @@ -54,6 +54,7 @@ void ValMemHeap_Free(void *pMemHeap, void *pMem); /**< メモリの開放 * MEMSIZE ValMemHeap_GetSize(void *pMemHeap, void *pMem); /**< メモリのサイズ取得 */ MEMSIZE ValMemHeap_GetAlign(void *pMemHeap); /**< メモリアライメントの取得 */ MEMSIZE ValMemHeap_AlignSize(void *pMemHeap, MEMSIZE Size); /**< サイズをアライメント単位に拡張 */ +int ValMemHeap_IsMember(void *pMemHeap, void *pMem); /**< メモリがヒープに属しているかチェック */ #define ValMemHeap_GetMemBlockSize(self) (ValMemHeap_AlignSize((self), sizeof(T_VALMEMHEAP_MEMBLK)))