diff --git a/OpenChange/code-MAPIStorePropertySelectors.h b/OpenChange/code-MAPIStorePropertySelectors.h new file mode 100644 index 000000000..f96d06f93 --- /dev/null +++ b/OpenChange/code-MAPIStorePropertySelectors.h @@ -0,0 +1,26 @@ +/* code-MAPIStorePropertySelectors.h - this file is part of SOGo + * + * Copyright (C) 2011 Inverse inc + * + * Author: Wolfgang Sourdeau + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +typedef int (*MAPIStorePropertyGetter) (id inst, SEL _cmd, void **data); + +const IMP *MAPIStorePropertyGettersForClass (Class klass); +SEL MAPIStoreSelectorForPropertyGetter (register uint16_t propertyId); diff --git a/OpenChange/code-MAPIStorePropertySelectors.m b/OpenChange/code-MAPIStorePropertySelectors.m new file mode 100644 index 000000000..2a72fe91b --- /dev/null +++ b/OpenChange/code-MAPIStorePropertySelectors.m @@ -0,0 +1,68 @@ +/* code-MAPIStorePropertySelectors.m - this file is part of SOGo + * + * Copyright (C) 2011 Inverse inc + * + * Author: Wolfgang Sourdeau + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#import +#import + +const IMP * +MAPIStorePropertyGettersForClass (Class klass) +{ + static NSMapTable *classesTable = nil; + IMP *getters; + IMP getter; + uint16_t count, idx; + SEL currentSel; + + if (!classesTable) + classesTable = NSCreateMapTable (NSNonOwnedPointerMapKeyCallBacks, + NSNonOwnedPointerMapValueCallBacks, + 0); + + getters = NSMapGet (classesTable, klass); + if (!getters) + { + getters = NSZoneCalloc (NULL, 65536, sizeof (IMP)); + for (count = 0; count < 65535; count++) + { + idx = MAPIStorePropertyGettersIdx[count]; + if (idx != 0xffff && !getters[count]) + { + currentSel = MAPIStorePropertyGetterSelectors[idx]; + if ([klass instancesRespondToSelector: currentSel]) + { + getter = [klass instanceMethodForSelector: currentSel]; + if (getter) + getters[count] = getter; + } + } + } + } + + return getters; +} + +SEL MAPIStoreSelectorForPropertyGetter (uint16_t propertyId) +{ + return ((MAPIStorePropertyGettersIdx[propertyId] != 0xffff) + ? MAPIStorePropertyGetterSelectors[MAPIStorePropertyGettersIdx[propertyId]] + : NULL); +}