OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Thu, 3 Oct 2019 12:29:26 +0000 (21:29 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Thu, 3 Oct 2019 12:29:26 +0000 (21:29 +0900)
  * WorkBackup

libgoblin/drd64_libgoblin_objinfo.c
libgoblin/test_libgoblin_objinfo.c

index 347e7d6..2b07af2 100644 (file)
@@ -347,6 +347,7 @@ LibGoblin_ObjectInfo *
                        Byte                                    b_type,
                        char                                    *pstr_name )
 {
+       DWord                                   dw_hash;
        int                                             i_result        = 0x00;
        LibGoblin_ObjectInfo    *p_objinfo      = NULL;
        LibGoblin_ObjectInfo    *p_objnow;
@@ -372,6 +373,9 @@ LibGoblin_ObjectInfo *
        p_objnow        = OBJINFO( p_pginfo, p_pginfo->objinfo.i_topid );
        assert( NULL != p_objnow );
 
+       if( NULL != pstr_name )
+               { dw_hash       = Common_CalcDJBhash( pstr_name ); }
+
        p_objover       = p_objnow;
        p_objprev       = NULL;
        do      {
@@ -404,7 +408,12 @@ LibGoblin_ObjectInfo *
 
                                if( OBJINFO_INSETMODE_CHKNAME & b_mode )        {
                                        if( b_type == p_objnow->b_type )        {
-                               
+                                               if( dw_hash == p_objnow->dw_hash )      {
+                                                       if( !strncmp( pstr_name, p_objnow->pstr_name, 256 ) )   {
+                                                               p_objinfo       = p_objnow;
+                                                               goto    goto_ObjectInfo_InsetObject_post;
+                                                       }
+                                               }       
                                        }
                                }
                        }
index 3c4deff..d5668e7 100644 (file)
@@ -754,6 +754,189 @@ void Test_ObjectInfo_InsetDelete_test00_005(
 }
 
 /*--------------------------------------------------------------------*/
+void Test_ObjectInfo_InsetDelete_test00_006(
+               LibGoblin_ProgramInfo   *p_pginfo )
+{
+       LibGoblin_ObjectInfo    *p_objinfo;
+
+       // ID10: 00000000h - f0000000h
+       //   ID02: 10000000h - 20000000h
+       //     ID01: 10000000h - 10100000h
+       //   ID03: 30000000h - 40000000h
+       //   ID04: 50000000h - 60000000h
+       //   ID11: 65000000h - b5000000h
+       //     ID09: 70000000h - 80000000h
+       //       ID05: 70000000h - 70001000h
+       //     ID08: 90000000h - a0000000h
+       //       ID07: 90100000h - 90200000h
+       //         ID06: 90101000h - 90102000h
+
+
+       // Alloc ---
+       //     ID01: 10000000h - 10100000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x10000000, 0x00100000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, NO_OBJ, NO_OBJ, NO_OBJ );
+
+       //   ID02: 10000000h - 20000000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x10000000, 0x10000000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 0, 1, NO_OBJ, NO_OBJ );
+
+       //   ID03: 30000000h - 40000000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x30000000, 0x10000000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 0, NO_OBJ, 2, NO_OBJ );
+
+       //   ID04: 50000000h - 60000000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x50000000, 0x10000000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 0, NO_OBJ, 3, NO_OBJ );
+
+       //       ID05: 70000000h - 70001000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x70000000, 0x00001000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 5, 0, NO_OBJ, 4, NO_OBJ );
+
+       //         ID06: 90101000h - 90102000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x90101000, 0x00001000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 6, 0, NO_OBJ, 5, NO_OBJ );
+
+       //       ID07: 90100000h - 90200000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x90100000, 0x00100000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 7, 0, 6, 5, NO_OBJ );
+
+       //     ID08: 90000000h - a0000000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x90000000, 0x10000000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 8, 0, 7, 5, NO_OBJ );
+
+       //     ID09: 70000000h - 80000000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x70000000, 0x10000000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 0, 5, 4, 8 );
+
+       // ID10: 00000000h - f0000000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x00000000, 0xf0000000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 10, 0, 2, NO_OBJ, NO_OBJ );
+
+       //   ID11: 65000000h - b5000000h
+       p_objinfo       = ObjectInfo_InsetObject(
+                                                       p_pginfo, 0x65000000, 0x50000000, NULL,
+                                                       OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
+                                                       OBJINFO_TYPE_NONE, NULL );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 11, 10, 9, 4, NO_OBJ );
+
+
+       // Check ---
+       p_objinfo       = OBJINFO( p_pginfo, 1 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 2 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 3 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 2, NO_OBJ, NO_OBJ, NO_OBJ );
+
+       p_objinfo       = OBJINFO( p_pginfo, 2 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 10 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 1 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 10, 1, NO_OBJ, 3 );
+
+       p_objinfo       = OBJINFO( p_pginfo, 3 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 1 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 4 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 10, NO_OBJ, 2, 4 );
+
+       p_objinfo       = OBJINFO( p_pginfo, 4 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 3 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 11 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 10, NO_OBJ, 3, 11 );
+
+       p_objinfo       = OBJINFO( p_pginfo, 5 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 9 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 8 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 5, 9, NO_OBJ, NO_OBJ, NO_OBJ );
+
+       p_objinfo       = OBJINFO( p_pginfo, 6 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 7 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == NO_OBJ );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 6, 7, NO_OBJ, NO_OBJ, NO_OBJ );
+
+       p_objinfo       = OBJINFO( p_pginfo, 7 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 8 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 6 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 7, 8, 6, NO_OBJ, NO_OBJ );
+
+       p_objinfo       = OBJINFO( p_pginfo, 8 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 5 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 7 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 8, 11, 7, 9, NO_OBJ );
+
+       p_objinfo       = OBJINFO( p_pginfo, 9 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 11 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 5 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 11, 5, NO_OBJ, 8 );
+
+       p_objinfo       = OBJINFO( p_pginfo, 10 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 0 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 2 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 10, 0, 2, NO_OBJ, NO_OBJ );
+
+       p_objinfo       = OBJINFO( p_pginfo, 11 );
+       CU_ASSERT( p_objinfo->addrlink.i_prev_id == 4 );
+       CU_ASSERT( p_objinfo->addrlink.i_next_id == 9 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 11, 10, 9, 4, NO_OBJ );
+
+
+       // Delete --- 
+       p_objinfo       = OBJINFO( p_pginfo, 11 );
+       ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
+       p_objinfo       = OBJINFO( p_pginfo, 4 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 10, NO_OBJ, 3, NO_OBJ );
+
+       p_objinfo       = OBJINFO( p_pginfo, 3 );
+       ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
+       p_objinfo       = OBJINFO( p_pginfo, 2 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 10, 1, NO_OBJ, 4 );
+
+       p_objinfo       = OBJINFO( p_pginfo, 2 );
+       ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
+       p_objinfo       = OBJINFO( p_pginfo, 4 );
+       Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 10, NO_OBJ, NO_OBJ, NO_OBJ );
+
+       p_objinfo       = OBJINFO( p_pginfo, 10 );
+       ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
+
+
+       // Delete MasterObject ---
+       p_objinfo       = OBJINFO( p_pginfo, 0 );
+       ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
+       CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
 void Test_ObjectInfo_InsetDelete_test00( void )
 {
        int             i_result;
@@ -809,6 +992,15 @@ void Test_ObjectInfo_InsetDelete_test00( void )
        i_result        = ObjectInfo_Term( p_pginfo );
        CU_ASSERT( 0x00 == i_result );
 
+       // -----------------
+       i_result        = ObjectInfo_Init( p_pginfo, 0 );
+       CU_ASSERT( 0x00 == i_result );
+
+       Test_ObjectInfo_InsetDelete_test00_006( p_pginfo );
+
+       i_result        = ObjectInfo_Term( p_pginfo );
+       CU_ASSERT( 0x00 == i_result );
+
 
        // Term -----------
        i_result        = ProgInfo_FreeProgInfo( p_pginfo );