/*
  Copyright (C) 2000-2005 SKYRIX Software AG

  This file is part of SOPE.

  SOPE is free software; you can redistribute it and/or modify it under
  the terms of the GNU Lesser General Public License as published by the
  Free Software Foundation; either version 2, or (at your option) any
  later version.

  SOPE 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 Lesser General Public
  License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with SOPE; see the file COPYING.  If not, write to the
  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.
*/

#ifndef __SoObjects_SoClassRegistry_H__
#define __SoObjects_SoClassRegistry_H__

#import <Foundation/NSObject.h>

/*
  SoClassRegistry
  
  The class registry is used to map ObjC classes to SoClasses, to map names
  to SoClasses and to map file-extensions to SoClasses.
*/

@class NSMutableDictionary, NSString, NSException;
@class SoClass;

@interface SoClassRegistry : NSObject
{
  NSMutableDictionary *objcToSoClass;
  NSMutableDictionary *extToSoClass;
  NSMutableDictionary *nameToSoClass;
}

+ (id)sharedClassRegistry;

/* name registry */

- (SoClass *)soClassWithName:(NSString *)_name;
- (SoClass *)soClassForExtension:(NSString *)_ext;
- (SoClass *)soClassForExactName:(NSString *)_name;

- (NSException *)registerSoClass:(SoClass *)_clazz forExtension:(NSString *)_e;
- (NSException *)registerSoClass:(SoClass *)_clazz forExactName:(NSString *)_n;

/* ObjC classes */

- (SoClass *)soClassForClass:(Class)_clazz;

@end

#endif /* __SoObjects_SoClassRegistry_H__ */
