Monotone-Parent: 4138731669f6496c58a7c665ee66513f2b2304ab

Monotone-Revision: 5c85a1a1d9228ad7653497f882f4fccc69f1d924

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2011-08-10T18:32:53
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau
2011-08-10 18:32:53 +00:00
parent fcc41a86ba
commit d873840031
3 changed files with 63 additions and 9 deletions

View File

@@ -38,8 +38,15 @@
#include <tdb.h>
#include <tdb_wrap.h>
static NSMutableDictionary *mappingRegistry = nil;
@implementation MAPIStoreMapping
+ (void) initialize
{
mappingRegistry = [NSMutableDictionary new];
}
static int
MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
void *data)
@@ -67,14 +74,20 @@ MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
return 0;
}
+ (id) mappingWithIndexing: (struct tdb_wrap *) indexing
+ (id) mappingForUsername: (NSString *) username
withIndexing: (struct tdb_wrap *) indexing
{
id newMapping;
id mapping;
newMapping = [[self alloc] initWithIndexing: indexing];
[newMapping autorelease];
mapping = [mappingRegistry objectForKey: username];
if (!mapping)
{
mapping = [[self alloc] initForUsername: username
withIndexing: indexing];
[mapping autorelease];
}
return newMapping;
return mapping;
}
- (id) init
@@ -84,12 +97,34 @@ MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
mapping = [NSMutableDictionary new];
reverseMapping = [NSMutableDictionary new];
indexing = NULL;
useCount = 0;
}
return self;
}
- (id) initWithIndexing: (struct tdb_wrap *) newIndexing
- (void) increaseUseCount
{
if (useCount == 0)
{
[mappingRegistry setObject: self forKey: username];
[self logWithFormat: @"mapping registered (%@)", username];
}
useCount++;
}
- (void) decreaseUseCount
{
useCount--;
if (useCount == 0)
{
[mappingRegistry removeObjectForKey: username];
[self logWithFormat: @"mapping deregistered (%@)", username];
}
}
- (id) initForUsername: (NSString *) newUsername
withIndexing: (struct tdb_wrap *) newIndexing
{
NSNumber *idNbr;
NSString *uri;
@@ -98,6 +133,7 @@ MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
if ((self = [self init]))
{
ASSIGN (username, newUsername);
indexing = newIndexing;
tdb_traverse_read (indexing->tdb, MAPIStoreMappingTDBTraverse, mapping);
keys = [mapping allKeys];
@@ -116,6 +152,7 @@ MAPIStoreMappingTDBTraverse (TDB_CONTEXT *ctx, TDB_DATA data1, TDB_DATA data2,
- (void) dealloc
{
[username release];
[mapping release];
[reverseMapping release];
[super dealloc];