Example #1
0
VALUE rb_s_Barcode_enumerate(int argc, VALUE *argv)

{
    CMethodResult oRes;


    oRes.setRubyObjectClass(getRuby_Barcode_Module());


    rho::common::IRhoRunnable* pFunctor = 0;
    bool bUseCallback = false;
    int nCallbackArg = 0;




    if ( argc > nCallbackArg )
    {


        if ( rho_ruby_is_proc(argv[nCallbackArg]) || rho_ruby_is_method(argv[nCallbackArg]) )
        {
            oRes.setRubyCallbackProc( argv[nCallbackArg] );
        }else if ( rho_ruby_is_string(argv[nCallbackArg]) )
        {
            oRes.setRubyCallback( getStringFromValue(argv[nCallbackArg]) );
        }else
        {
            oRes.setArgError(L"Type error: callback should be String");
            return oRes.toRuby();
        }

        oRes.setCallInUIThread(false);
        if ( argc > nCallbackArg + 1 )
        {
            if ( !rho_ruby_is_string(argv[nCallbackArg + 1]) )
            {
                oRes.setArgError(L"Type error: callback parameter should be String");
                return oRes.toRuby();
            }

            oRes.setCallbackParam( getStringFromValue(argv[nCallbackArg + 1]) );
        }
        
        bUseCallback = true;
    }


    pFunctor = rho_makeInstanceClassFunctor1( CBarcodeFactoryBase::getBarcodeSingletonS(), &IBarcodeSingleton::enumerate,  oRes );




    if ( bUseCallback )
        CBarcodeFactoryBase::getBarcodeSingletonS()->addCommandToQueue( pFunctor );
    else
    {
        delete pFunctor;


        CBarcodeFactoryBase::getBarcodeSingletonS()->enumerate(  oRes );


    }


    return oRes.toRuby();
}