Go to the FreeLists Home Page Home Signup Help Login
 



[openbeostranslationkit] || [Date Prev] [04-2002 Date Index] [Date Next] || [Thread Prev] [04-2002 Thread Index] [Thread Next]

[openbeostranslationkit] Instantiating Translator (AKA: ARGH!)

  • From: "Brian Matzon" <brian@xxxxxxxxx>
  • To: openbeostranslationkit@xxxxxxxxxxxxx
  • Date: Mon, 22 Apr 2002 13:53:47 GMT
Ok this is annoying the hell out of me!
I simply cannon instantiate a BTranslatorRoster.
before going to the openbeos list I'd figure that 
I would try the actual team again :)

Ordinarily BArchivable extended classes, may be archived using the
Archive(BMessage* message) method and instantiated using the
Instantiate(BMessage* message) method.

Thus the following should work fine (it does not!)
BTranslatorRoster* translator_roster = NULL;
BMessage translator_message;

translator_roster = new BTranslatorRoster();
translator_roster->AddTranslators("/boot/home/config/add-ons/
Translators/");
..
//verify that translators are actually loaded
..

//archive the sucker
translator_roster->Archive(&translator_message);

//delete old translator_roster and reinstantiate
delete translator_roster;
translator_roster = (BTranslatorRoster*) 
BTranslatorRoster::Instantiate(&translator_message);

translator_roster is now NULL - how come????

Ok, so I tested an alternative, reading the docs 
BTranslatorRoster::Instantiate says:
Returns a new BTranslatorRoster object, allocated by new and created 
with the version of the constructor that takes a BMessage archive. 
However, if the archive doesn't contain data for a BTranslatorRoster 
object, Instantiate() returns NULL

If this is the case - then the following should work:

translator_message.AddString("be:translator_path", "/boot/home/config/
add-ons/Translators/");
translator_roster = (BTranslatorRoster*) 
BTranslatorRoster::Instantiate(&translator_message);

but it doesn't *ponder!*

the actual instantiate test is available from CVS (openbeos/sources/os/
kits/translation/tests/)
 - the method in question is:
status_t TranslatorRosterTest::InstantiateTest()
however this only contains the latter of the tests. So for 
completeness, this is the first test:
-- 8< --
translator_roster = new BTranslatorRoster();
        translator_roster->AddTranslators("/boot/home/config/add-ons/
Translators/");
        
        //write it to output
        if(translator_roster != NULL) {
                int32 num_translators;
                translator_id* translators;
                translator_roster->GetAllTranslators(&translators, &
num_translators);
                if(num_translators <= 0) {
                        Debug("Unable to load translators, or no translators 
installed\n");
                        return B_ERROR;
                } else {
                        printf("%ld translator(s) loaded\n", num_translators);
                }
                delete [] translators;  
        } else {
                printf("Unable to instantiate translator roster\n");
        }       
        translator_roster->Archive(&translator_message);
        
        delete translator_roster;
        
        //instantiate
        translator_roster = (BTranslatorRoster*) 
BTranslatorRoster::Instantiate(&translator_message);
        if(translator_roster != NULL) {
                int32 num_translators;
                translator_id* translators;
                translator_roster->GetAllTranslators(&translators, &
num_translators);
                if(num_translators <= 0) {
                        Debug("Unable to load translators, or no translators 
installed\n");
                        return B_ERROR;
                } else {
                        printf("%ld loaded\n", num_translators);
                }
                delete [] translators;  
        } else {
                printf("Unable to instantiate translator roster\n");
        }
-- 8< --






[ Home | Signup | Help | Login | Archives | Lists ]

All trademarks and copyrights within the FreeLists archives are owned by their respective owners.
Everything else ©2007 Avenir Technologies, LLC.