Example #1
0
TEST_F( TArrayTest, moveTest ) {
    TArray<float> arrayInstance;
    arrayInstance.add( 1.0f );
    arrayInstance.add( 2.0f );
    arrayInstance.add( 3.0f );
    arrayInstance.move( 1, 3 );
}
Example #2
0
TEST_F( TArrayTest, findTest )	{
    TArray<float> arrayInstance;
	arrayInstance.add( 0.0f );
	arrayInstance.add( 1.0f );
	arrayInstance.add( 2.0f );
	arrayInstance.add( 3.0f );
	EXPECT_EQ( 4, arrayInstance.size() );

    TArray<float>::Iterator it = arrayInstance.find( 1.0f );
	EXPECT_NE( it, arrayInstance.end() );
	EXPECT_EQ( *it, 1.0f );
}
Example #3
0
TEST_F( TArrayTest, addItemsTest ) {
    TArray<float> arrayInstance;
    arrayInstance.add( 0.0f );

    float data[2] = { 0, 1 };
    arrayInstance.add( data, 2 );
    EXPECT_EQ( 3, arrayInstance.size() );
    EXPECT_EQ( 0.0f, arrayInstance[ 0 ] );
    EXPECT_EQ( 0.0f, arrayInstance[ 1 ] );
    EXPECT_EQ( 1.0f, arrayInstance[ 2 ] );

    arrayInstance.add( nullptr, 0 );
    EXPECT_EQ( 3, arrayInstance.size() );
}
Example #4
0
TEST_F( TArrayTest, ContainerClearTest ) {
    TArray<float*> arrayInstance;
    ContainerClear( arrayInstance );
    EXPECT_TRUE( arrayInstance.isEmpty() );

    arrayInstance.add( new float( 0.0f ) );
    arrayInstance.add( new float( 1.0f ) );
    arrayInstance.add( new float( 2.0f ) );

    EXPECT_EQ( arrayInstance.size(), 3U );
    ContainerClear( arrayInstance );
    EXPECT_EQ( arrayInstance.size(), 0U );
    EXPECT_TRUE( arrayInstance.isEmpty() );
}
Example #5
0
        JumpControlTbl(const hyu8** pCode)
            : tbl(0)
        {
            const hyu8* code = *pCode;
            hyu16 endOffs = Endian::unpack<hyu16>(code);
            const hyu8* endAddr = code + endOffs;
            code += 2;
            hyu8 numTbl = *code;
            code += 2;
            hyu16* tblOffs = (hyu16*) code;
            code += sizeof(hyu16) * numTbl;
            alignPtr<4>(&code);

            tbl.initialize(numTbl);
            for (hyu8 i = 0; i < numTbl; ++i) {
                HMD_ASSERTMSG(tblOffs[i] == code - *pCode, "offs=%x, code=%x, start=%x",tblOffs[i],code,*pCode);
                hyu8 numLabel = *code;
                code += 4;
                BMap<hys32, SymbolID_t>* addrLabel = new BMap<hys32, SymbolID_t>(numLabel);
                SymbolID_t* labels = (SymbolID_t*) code;
                hys32* addrs = (hys32*)(code + sizeof(SymbolID_t) * numLabel);
                alignPtr<4>(&addrs);
                for (hyu8 j = 0; j < numLabel; ++j) {
                    addrLabel->forceAdd(addrs[j], labels[j]);
                }
                tbl.add(addrLabel);
                code = (const hyu8*) (addrs + numLabel);
            }
            HMD_ASSERT(code == endAddr);
            *pCode = code;
        }
Example #6
0
 // ロードパスを追加する
 void    addLoadPath(const char* path)
 {
     //printf("addLoadPath(%s)\n", path);
     hyu32 n = loadPathArr.size();
     if (n == 0) {
         loadPathArr.add(NULL);
         n = 1;
     }
     hyu32 len = HMD_STRLEN(path);
     char* apath = gMemPool->allocT<char>(len+1);
     HMD_STRNCPY(apath, path, len+1);
     loadPathArr[n-1] = apath;  // end mark に上書き
     loadPathArr.add(NULL);     // 新しい end mark
     HMD_LOADPATH = loadPathArr.top();
     // n=0;for(const char** p = HMD_LOADPATH; *p != NULL; ++p)HMD_PRINTF("path %d:'%s'\n",n++,*p);
 }
Example #7
0
TEST_F( TArrayTest, accessTest) {
    TArray<float> arrayInstance;
	arrayInstance.add( 0.0f );
	arrayInstance.add( 1.0f );
		
	EXPECT_EQ( 0.0f, arrayInstance[ 0 ] );
	EXPECT_EQ( 1.0f, arrayInstance[ 1 ] );
}
Example #8
0
    // バイトコードがメモリにロードされた直後のコールバック。
    // 対応するDLLがあればロードする
    static void cb4dll(const char* hybPath)
    {
        int len = HMD_STRLEN(hybPath);
        char* dllPath = (char*)HMD_ALLOCA(len + sizeof(dll_prefix)+sizeof(dll_ext));
        char* q = dllPath;
        char* q2 = q;

        const unsigned char* p = _mbsrchr((const unsigned char*)hybPath, PATH_DELIM);
        if (p == NULL) {
            p = (const unsigned char*)hybPath;
        } else {
            p += 1;
            size_t lp = p - (const unsigned char*)hybPath;
            memcpy(q, hybPath, lp);
            q += lp;
            q2 = q;
        }
        // pはhybPathのファイル名部分の先頭アドレス
        const unsigned char* p2 = _mbsstr((const unsigned char*)p, (const unsigned char*)".hyb");
        if ((p2 <= p) || (p2 >= (const unsigned char*)hybPath + len)) {
            p2 = (const unsigned char*)hybPath + len;
        }
        // p2は拡張子を抜いたファイル名部分の末尾アドレス

        memcpy(q, dll_prefix, sizeof(dll_prefix));
        q += sizeof(dll_prefix) - 1;
        size_t lp2 = p2 - p;
        memcpy(q, p, lp2);
        q += lp2;
        memcpy(q, dll_ext, sizeof(dll_ext));
        q += sizeof(dll_ext) - 1;
        *q = '\0';

#ifdef VERBOSE_LOAD_DLL
        HMD_PRINTF("try load dll: %s\n", dllPath);
#endif
		HMODULE hmod = LoadLibraryMB(dllPath);    // dllロード
#ifdef VERBOSE_LOAD_DLL
        if (hmod == NULL) printLastError();
#endif        
        if (hmod == NULL && q2 != dllPath) {
            // パス抜きのファイル名だけでロードしてみる
#ifdef VERBOSE_LOAD_DLL
            HMD_PRINTF("try load dll: %s\n", q2);
#endif        
            hmod = LoadLibraryMB(q2);
#ifdef VERBOSE_LOAD_DLL
            if (hmod == NULL) printLastError();
#endif        
        }

        if (hmod != NULL) {
            dllHandleArr.add(hmod);
#ifdef VERBOSE_LOAD_DLL
            HMD_PRINTF("DLL '%s' loaded.\n", q2);
#endif
        }
    }
Example #9
0
TEST_F( TArrayTest, addTest) {
    TArray<float> arrayInstance;
	arrayInstance.add( 0.0f );
	arrayInstance.add( 1.0f );

	EXPECT_EQ( 2, arrayInstance.size() );
	EXPECT_EQ( 0.0f, arrayInstance[ 0 ] );
	EXPECT_EQ( 1.0f, arrayInstance[ 1 ] );
}
Example #10
0
TEST_F( TArrayTest, removeItTest) {
    TArray<float> arrayInstance;
    arrayInstance.add( 1.0f );
    EXPECT_EQ( 1, arrayInstance.size() );
    TArray<float>::Iterator it = arrayInstance.find( 1.0f );
    EXPECT_NE( arrayInstance.end(), it );

    arrayInstance.remove( it );
    EXPECT_EQ( 0, arrayInstance.size() );
}
Example #11
0
TArray<char>* replaceSymbol(const char* line)
{
    TArray<char>* buf = new TArray<char>(HMD_STRLEN(line)+1);
    const char* p = line;
    char c;
    while ('\0' != (c = *p)) {
        if (c == '{') {
            int n = getSymIDNum(&p);
            if (n >= 0) {
                const char* s = (const char*)gSymbolTable.id2str((SymbolID_t)n);
                if (s != NULL) {
                    hyu32 len = HMD_STRLEN(s);
                    memcpy(buf->addSpaces(len), s, len);
                    continue;
                }
            }
        }
        buf->add(c);
        ++p;
    }
    buf->add('\0');
    return buf;
}
Example #12
0
DebugInfos* getDebInfo(const char* package)
{
    SymbolID_t pkgid = gSymbolTable.symbolID(package);
    DebugInfos** pdsi = m_debInfos.find(pkgid);
    if (pdsi != NULL)
        return *pdsi;
    hyu32 len = HMD_STRLEN(package);
    TArray<char>* fname = new TArray<char>(len + HMD_STRLEN(DEBUGINFO_EXT) + 1);
    memcpy(fname->addSpaces(len), package, len);
    len = HMD_STRLEN(DEBUGINFO_EXT);
    memcpy(fname->addSpaces(len), DEBUGINFO_EXT, len);
    fname->add('\0');

    return new DebugInfos(fname->top());
}
Example #13
0
 void test_replace(void)
 {
     TArray<int> arr;
     arr.initialize(10);
     for (int i = 0; i < 10; ++i)
         arr.add(i * 10);
     CPPUNIT_ASSERT_EQUAL(30, arr.replace(3, -10));
     CPPUNIT_ASSERT_EQUAL(50, arr.replace(5, -10));
     CPPUNIT_ASSERT_EQUAL(80, arr.replace(8, 800));
     CPPUNIT_ASSERT_EQUAL(-10, arr.replace(5, 10));
     CPPUNIT_ASSERT_EQUAL(-10, arr.replace(3, 10));
     CPPUNIT_ASSERT_EQUAL(800, arr.replace(8, 10));
     CPPUNIT_ASSERT_EQUAL((hyu32)10, arr.size());
     arr.deleteVal(10);
     CPPUNIT_ASSERT_EQUAL((hyu32)6, arr.size());
 }
Example #14
0
    void test_deleteVal(void)
    {
        TArray<int> arr;

        arr.initialize(10);
        for (int i = 0; i < 10; ++i)
            arr.add(i * 10);
        arr[3] = 80;
        arr[6] = 80;
        CPPUNIT_ASSERT_EQUAL((hyu32)10, arr.size());
        arr.deleteVal(20);
        CPPUNIT_ASSERT_EQUAL((hyu32)9, arr.size());
        arr.deleteVal(80);
        CPPUNIT_ASSERT_EQUAL((hyu32)6, arr.size());
        CPPUNIT_ASSERT_EQUAL(0, arr[0]);
        CPPUNIT_ASSERT_EQUAL(10, arr[1]);
        CPPUNIT_ASSERT_EQUAL(40, arr[2]);
        CPPUNIT_ASSERT_EQUAL(50, arr[3]);
        CPPUNIT_ASSERT_EQUAL(70, arr[4]);
        CPPUNIT_ASSERT_EQUAL(90, arr[5]);
    }
Example #15
0
ui32 Tokenizer::tokenize( const String& str, TArray<String>& tokens, const String& delimiters ) {
    // Skip delimiters at beginning.
    String::size_type lastPos = str.find_first_not_of( delimiters, 0 );
    
    // find first "non-delimiter".
    String::size_type pos = str.find_first_of( delimiters, lastPos );
    while( String::npos != pos || String::npos != lastPos ) {
        // Found a token, add it to the vector.
        String tmp = str.substr( lastPos, pos - lastPos );
        if ( !tmp.empty() && ' ' != tmp[ 0 ] ) {
            tokens.add( tmp );
        }
        
        // Skip delimiters.  Note the "not_of"
        lastPos = str.find_first_not_of( delimiters, pos );
        
        // Find next "non-delimiter"
        pos = str.find_first_of( delimiters, lastPos );
    }

    return static_cast<ui32>( tokens.size() );
}
Example #16
0
//---------------------------------------------------------------------------------------------
//	Heap corruption after grow.
//---------------------------------------------------------------------------------------------
TEST_F( TArrayTest, bug_AddHeapCorruptTest ) {
    TArray<float> arrayInstance;
	for ( size_t i=0; i<50; ++i ) {
        arrayInstance.add( ( float ) i );
	}
}
Example #17
0
void Context::writeByteCodes(TArray<hyu8>* out)
{
    TArray<hyu8> classInitializer;
    m_bytecode.write(&classInitializer);
    TArray< TArray<hyu8>* > binaries;
    TArray< TArray<hyu8>* > needDeleteBin;
    //innerClassSyms = @innerClasses.keys.sort
    TArray<SymbolID_t>& innerClassSyms = m_innerClasses.keys();

    hyu16 flags = 0;
    if (classInfo()->isPrimitive())
        flags |= 0x0001;

    hyu32 numInnerClass = innerClassSyms.size();
    HMD_ASSERT(numInnerClass < 65536);

    TArray<SymbolID_t>& methodSyms = m_classInfo->m_methods.keys();
    TArray<ClassInfo::m_SigCode_t>& methodSigCodes = m_classInfo->m_methods.values();
    hyu32 numMethod = methodSyms.size();
    HMD_ASSERT(numMethod < 65536);
    hyu32 numClosure = m_classInfo->numClosure();
    HMD_ASSERT(numClosure < 65536);

    packOut<hyu16>(out,flags);                // フラグ hyu16
    packOut<hyu16>(out,(hyu16)numMethod);      // メソッド数 hyu16
    packOut<hyu16>(out,(hyu16)numInnerClass);   // インナークラス数 hyu16
    packOut<hyu16>(out,m_classInfo->numSuper());    // スーパークラス数 hyu16
    packOut<hyu16>(out,m_classInfo->numClassVar()); // クラス変数数 hyu16
    packOut<hyu16>(out,m_classInfo->numMembVar()); // メンバ変数数 hyu16
    packOut<hyu16>(out,m_classInfo->numConstVar());    // 定数数 hyu16
    packOut<hyu16>(out,m_classInfo->numDefaultVal()); // デフォルト値数
    packOut<hyu16>(out,(hyu16)numClosure);            // クロージャ数 hyu16
    packOut<hyu16>(out,0xf9f9); // 未使用

    for (hyu32 i = 0; i < numMethod; i++)
        packOut<SymbolID_t>(out,methodSyms[i]); // メソッドシンボル
    for (hyu32 i = 0; i < numInnerClass; i++)
        packOut<SymbolID_t>(out,innerClassSyms[i]);    // クラス名シンボル


    m_classInfo->writeClassVarSyms(out); // クラス変数シンボル
    m_classInfo->writeMembVarSyms(out); // メンバ変数シンボル
    m_classInfo->writeConstVarSyms(out); // 定数シンボル


    out->align(4, 0xfb);


    hyu32 pos = classInitializer.size();

    for (hyu32 i = 0; i < numMethod; i++) {
        packOut<hyu32>(out, pos);     // メソッドオフセット
        Bytecode* bc = methodSigCodes[i].pBytecode;
        TArray<hyu8>* bin = new TArray<hyu8>(128);
        needDeleteBin.add(bin);
        bc->setOffset(pos);
        bc->write(bin);
        binaries.add(bin);
        pos += bin->size();
        HMD_DEBUG_ASSERT((pos & 3) == 0);
    }
    for (hyu32 i = 0; i < numClosure; i++) {
        packOut<hyu32>(out, pos);     // クロージャオフセット
        Bytecode* bc = m_classInfo->m_closures[i];
        TArray<hyu8>* bin = new TArray<hyu8>(128);
        needDeleteBin.add(bin);
        bc->setOffset(pos);
        bc->write(bin);
        binaries.add(bin);
        pos += bin->size();
        HMD_DEBUG_ASSERT((pos & 3) == 0);
    }

    for (hyu32 i = 0; i < numInnerClass; i++) {
        packOut<hyu32>(out, pos);     // クラスオフセット
        Context* inner = m_innerClasses[innerClassSyms[i]];
        TArray<hyu8>* bin = new TArray<hyu8>(128);
        needDeleteBin.add(bin);
        inner->bytecode().setOffset(pos);
        inner->writeByteCodes(bin);
        bin->align(4, 0xfa);
        binaries.add(bin);
        pos += bin->size();
    }

    packOut<hyu32>(out, pos); // インナークラスバイトコードの終了位置オフセット

    m_classInfo->writeSuperLinks(out); // スーパークラス
    m_classInfo->writeUsingPaths(out); // usingパス情報

    //printf("classInitializer addr=%x\n",out->size());
    m_bytecode.setOffset(m_bytecode.getOffset() + out->size());
    out->add(classInitializer);
    hyu32 n = binaries.size();
    for (hyu32 i = 0; i < n; i++) {
        out->add(*binaries[i]);
    }
    n = needDeleteBin.size();
    for (hyu32 i = 0; i < n; i++) {
        delete needDeleteBin[i];
    }
#ifdef EXPERIMENT_SYMBOL_DUMP
    m_classInfo->printSyms();
#endif
}
Example #18
0
    void createArray( const float *pOrig, size_t numItems, TArray<float> &arrayInstance ) {
		for ( size_t i=0; i<numItems; ++i ) {
			arrayInstance.add( pOrig[ i ] );
		}
	}
Example #19
0
bool AppBase::onCreate( Properties::Settings *config ) {
    if ( m_state != State::Uninited ) {
        osre_debug( Tag, "AppBase::State not in proper state: Uninited." );
        return false;
    }

    // create the platform abstraction
    if( nullptr != config && config != m_settings ) {
        delete m_settings;
        m_settings = config;
    }

    // create the asset registry
    Assets::AssetRegistry *registry( Assets::AssetRegistry::create() );
    OSRE_ASSERT( nullptr!=registry );
    if ( nullptr==registry ) {
        osre_debug( Tag, "Cannot create asset registry." );
    }

    // create the platform interface instance
    m_platformInterface = Platform::PlatformInterface::create( m_settings );
	if (nullptr == m_platformInterface) {
		osre_error(Tag, "Pointer to platform interface is nullptr.");
		return false;
	}

    if( !m_platformInterface->open() ) {
		osre_error(Tag, "Error while opening platform interface.");
		return false;
    }

    // register any available platform-specific log streams
    Common::AbstractLogStream *stream = Platform::PlatformPluginFactory::createPlatformLogStream();
    if( nullptr != stream ) {
        Logger::getInstance()->registerLogStream( stream );
    }

    // create the render back-end
    m_rbService = new RenderBackend::RenderBackendService();
    m_rbService->setSettings(m_settings, false);
    if( !m_rbService->open() ) {
        m_rbService->release();
        m_rbService = nullptr;
        return false;
    }
    m_platformInterface->getPlatformEventHandler()->setRenderBackendService( m_rbService );
    
    // enable render-back-end
    if( m_platformInterface ) {
        RenderBackend::CreateRendererEventData *data = new RenderBackend::CreateRendererEventData( m_platformInterface->getRootWindow() );
        data->m_pipeline = createDefaultPipeline();
        m_rbService->sendEvent( &RenderBackend::OnCreateRendererEvent, data );
    }
    m_timer = Platform::PlatformInterface::getInstance()->getTimer();

    // create our world
    Scene::RenderMode mode = static_cast<Scene::RenderMode>( m_settings->get( Properties::Settings::RenderMode ).getInt() );
    m_world = new Scene::World( "world", mode );
    
    ServiceProvider::create( m_rbService );

    // Setup onMouse event-listener
    AbstractPlatformEventQueue *evHandler = m_platformInterface->getPlatformEventHandler();
    if ( nullptr != evHandler ) {
        TArray<const Common::Event*> eventArray;
        eventArray.add( &MouseButtonDownEvent );
        eventArray.add( &MouseButtonUpEvent );
        m_mouseEvListener = new MouseEventListener;
        evHandler->registerEventListener( eventArray, m_mouseEvListener );
    }

    IO::IOService::create();

    m_uiRenderer = new UI::UiRenderer;

    // set application state to "Created"
    osre_debug( Tag, "Set application state to Created." );
    m_state = State::Created;
    
    return true;
}
Example #20
0
 // 終了時処理関数を登録する
 void    addTermFunc(RFunc_t func)
 {
     termFuncArr.add(func);
 }
Example #21
0
 // 1フレームに1回呼ばれる描画関数を登録する
 void    addDrawFunc(RFunc_t func)
 {
     drawFuncArr.add(func);
 }
Example #22
0
 // 1フレームに1回呼ばれるアップデート関数を登録する
 void    addUpdateFunc(RFunc_t func)
 {
     updateFuncArr.add(func);
 }
Example #23
0
    void test_array(void)
    {
        int dat[10] = { 100, 110, 120, -130, 140, -15000, 16000, 1700, 18, 19000 };
        TArray<int> arr;

        arr.initialize(0);
        CPPUNIT_ASSERT_EQUAL((int*)NULL, arr.m_contents);
        CPPUNIT_ASSERT_EQUAL((hyu32)0, arr.size());
        CPPUNIT_ASSERT_EQUAL((hyu32)0, arr.m_capacity);

        arr.initialize(2);
        CPPUNIT_ASSERT(arr.m_contents != NULL);
        CPPUNIT_ASSERT_EQUAL((hyu32)0, arr.size());
        CPPUNIT_ASSERT_EQUAL((hyu32)2, arr.m_capacity);
        arr.add(dat, 5);
        CPPUNIT_ASSERT_EQUAL((hyu32)5, arr.size());
        CPPUNIT_ASSERT_EQUAL(100, arr[0]);
        CPPUNIT_ASSERT_EQUAL(140, arr[4]);
        arr.fill(7);
        CPPUNIT_ASSERT_EQUAL(7, arr[0]);
        CPPUNIT_ASSERT_EQUAL(7, arr[4]);

        CPPUNIT_ASSERT(arr.checkIndex(100));
        CPPUNIT_ASSERT(arr.checkIndex(-5));
        CPPUNIT_ASSERT(! arr.checkIndex(-6));

        arr[2] = 222;
        CPPUNIT_ASSERT_EQUAL(222, *(arr.nthAddr(2)));

        arr.subst(20, 202020, -1);
        CPPUNIT_ASSERT_EQUAL((hyu32)21, arr.size());
        CPPUNIT_ASSERT_EQUAL(-1, arr[5]);
        CPPUNIT_ASSERT_EQUAL(-1, arr[19]);
        CPPUNIT_ASSERT_EQUAL(202020, arr[20]);

        arr.add(&dat[5], 5);
        arr.add(123);
        arr.add(456);
        CPPUNIT_ASSERT_EQUAL((hyu32)28, arr.size());
        CPPUNIT_ASSERT_EQUAL(-15000, arr[21]);
        CPPUNIT_ASSERT_EQUAL(19000, arr[25]);
        CPPUNIT_ASSERT_EQUAL(123, arr[26]);
        CPPUNIT_ASSERT_EQUAL(456, arr[27]);

        int x = 222;
        CPPUNIT_ASSERT_EQUAL(2, arr.issue(x));
        x = 202020;
        CPPUNIT_ASSERT_EQUAL(20, arr.issue(x));
        x = 123;
        CPPUNIT_ASSERT_EQUAL(26, arr.issue(x));
        CPPUNIT_ASSERT_EQUAL((hyu32)28, arr.size());
        x = 98765;
        CPPUNIT_ASSERT_EQUAL(28, arr.issue(x));
        CPPUNIT_ASSERT_EQUAL(98765, arr[28]);

        arr.clear();
        CPPUNIT_ASSERT_EQUAL((hyu32)0, arr.size());

        hyu32 capa = arr.m_capacity;
        arr.reserve(capa);
        CPPUNIT_ASSERT(capa != arr.m_capacity);
    }