// Copyright " 1994 Taligent, Inc. All Rights Reserved.
// $Revision: 1.2 $
#ifndef __DATAMANAGEMENT__
#include <DataManagement.h>
#endif
#ifndef __COLLECTIONS__
#include <Collections.h>
#endif
#ifndef __RUNTIME__
#include <RunTime.h>
#endif
#ifndef __STORAGE__
#include <Storage.h>
#endif
#ifndef Taligent_STANDARDTEXT
#include <StandardText.h>
#endif
#ifndef _FILESYSTEMINTERFACE_
#include <FileSystemInterface.h>
#endif
void main()
{
TDirectory theTaligentRoot;
TStandardText myTestDictionaries("TestDictionaries");
TStandardText theDictionaryName("TestA");
TRY
{
theTaligentRoot = TPathName::GetTaligentRoot();
}
CATCH (TStandardException)
{
qprintf("The Taligent Root directory does not exist, exiting now! \n");
return;
} ENDTRY;
// ok, we have a directory up to TaligentRoot
// see if my testDictionary subdirectory exists
TPropertyQuery query = TFileSystemEntity::kName == myTestDictionaries;
TFileSystemEntity myTestEntity;
TRY
{
myTestEntity = theTaligentRoot.LookUp (query);
}
CATCH(TStandardException)
{
TRY
{
theTaligentRoot.CreateDirectory(myTestDictionaries);
}
CATCH (TStandardException)
{
qprintf("The directory specified could not be created, exiting now! \n");
return;
} ENDTRY;
// directory created, lookup again to verify?
TRY
{
myTestEntity = theTaligentRoot.LookUp (query);
}
CATCH (TStandardException)
{
qprintf("The directory specified was not be created\n");
return;
} ENDTRY;
}
ENDTRY;
// now TestDictionaries exists as a subdirectory of TaligentRoot
// this will serve as the directory for some dictionaries
// myTestEntity should be the TDirectory to $TaligentRoot/TestDictionaries
TDirectory theDirectory = myTestEntity;
try
{
dict = new TDiskDictionary(theDirectory, theDictionaryName);
}
catch (TStandardException)
{
qprintf("dict failed -- BytesAllocated = %d diff = %d\n", myafter, mydiffer);
qprintf("The Dictionary threw an exception, exiting now! \n");
return;
}
for (long i=1, j=i+1; i <= 10; i++, j++) {
TCollectibleLong key(i);
TCollectibleLong val(j);
dict->Add(key,val);
}
dict->Commit();
// example of using TDiskDictionary::Count
unsigned long myCount = dict->Count();
// example using TDiskDictionaryIterator
TDiskDictionaryIterator* myIterator = new TDiskDictionaryIterator(dict);
for (i=0; i=myCount; i++ ) {
if (i==0)
myAssoc = myIterator->First();
else
myAssoc = myIterator->Next();
if (myAssoc)
delete myAssoc;
else
{
qprintf("No Assoc exists for i = %d ",i);
if (i == myCount)
qprintf("This is expected.\n");
else
qprintf("This is NOT expected!\n");
break;
}
}
delete myIterator;
// example of using TDiskDictionary::SetDestroyFileOnDelete
dict->SetDestroyFileOnDelete(FALSE); // leave files intact when dict deleted
delete dict;
qprintf("Pass A completed.\n");
TDiskDictionary* dict2 = new TDiskDictionary(myDict);
for (i=11, j=i+1; i <= 20; i++, j++) {
TCollectibleLong key(i);
TCollectibleLong val(j);
dict->Add(key,val);
}
dict2->Commit();
// example of using TDiskDictionary::SetDestroyFileOnDelete
dict2->SetDestroyFileOnDelete(FALSE); // leave files intact when dict deleted
delete dict2;
qprintf("Pass B completed.\n");
TDiskDictionary* dict3 = new TDiskDictionary(myDict);
qprintf("The existence of dict3 is %d\n", dict3->DidExistAlready());
// example of using TDiskDictionary::Count
qprintf("The number or records in dict3 is %d\n", dict3->Count());
for (i = 1; i <= 20; i++) {
TCollectibleLong key(i);
TCollectibleLong *tmpKey;
if ((tmpKey=(TCollectibleLong*)dict3->Member (key)) != NIL) { // using Member
TCollectibleLong *val = (TCollectibleLong *)dict3->Retrieve (key);
qprintf("The value retrieved for key \"%d\" = %d\n", key.GetValue(),
val->GetValue());
delete val;
delete tmpKey;
// example of using TDiskDictionary::Remove
dict3->Remove(key);
}
}
// example of using TDiskDictionary::SetDestroyFileOnDelete
dict3->SetDestroyFileOnDelete(TRUE); // remove the files when dict is deleted
delete dict3;
qprintf("Done.\n");
}