* EOAccess/EOAttribute.[hm]: Add documentation.

(_valueTypeChar): Replace char type with ...
	(_valueTypeCharacter): ... unichar type.
	([_valueTypeCharacter): Add comment about caching issue.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@23531 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
David Ayers 2006-09-16 03:27:17 +00:00
parent 6db22cf80d
commit 081f2c530d
4 changed files with 81 additions and 14 deletions

View file

@ -1,3 +1,10 @@
2006-09-16 David Ayers <ayers@fsfe.org>
* EOAccess/EOAttribute.[hm]: Add documentation.
(_valueTypeChar): Replace char type with ...
(_valueTypeCharacter): ... unichar type.
([_valueTypeCharacter): Add comment about caching issue.
2006-09-15 Matt Rice <ratmice@yahoo.com> 2006-09-15 Matt Rice <ratmice@yahoo.com>
* EOInterface/EODisplayGroup.m: Correct selector name. * EOInterface/EODisplayGroup.m: Correct selector name.

View file

@ -84,7 +84,7 @@ typedef enum {
unsigned int _width; unsigned int _width;
unsigned short _precision; unsigned short _precision;
short _scale; short _scale;
char _valueTypeChar; /** First char of _valueType or \0 **/ unichar _valueTypeCharacter; /** First char of _valueType or \0 **/
Class _valueClass; Class _valueClass;
EOAdaptorValueType _adaptorValueType; EOAdaptorValueType _adaptorValueType;
EOFactoryMethodArgumentType _argumentType; EOFactoryMethodArgumentType _argumentType;

View file

@ -646,6 +646,23 @@ RCS_ID("$Id$")
return isFlattened; return isFlattened;
} }
/**
* <p>Returns the name of the class values of this attribute
* are represented by. The standard classes are NSNumber,
* NSString, NSData and NSDate for the corresponding
* [adaptorValueType]. A model can define more specific
* classes like NSDecimalNumber, NSCalendarDate and NSImage
* or custom classes which implement a factory method
* specified by [valueFactoryMethodName] to create instances
* with the data supplied by the data source.</p>
* <p>If the valueClassName has not been set explicitly and the
* reciever [isFlattened], the valueClassName of the flattened
* attribute is returned.</p>
* <p>Otherwise, if the reciever has a prototype then the
* valueClassName of the prototype is returned.</p>
* <p>If all that fails, this method returns nil.</p>
* <p>See also:[setValueClassName:]</p>
*/
- (NSString *)valueClassName - (NSString *)valueClassName
{ {
if (_valueClassName) if (_valueClassName)
@ -657,6 +674,16 @@ RCS_ID("$Id$")
return [_prototype valueClassName]; return [_prototype valueClassName];
} }
/**
* <p>Returns the adaptor specific name of externalType. This is
* the name use during SQL generation.</p>
* <p>If the externalType has not been set explicitly and the
* reciever [isFlattened], the valueClassName of the flattened
* attribute is returned.</p>
* <p>Otherwise, if the reciever has a prototype then the
* externalType of the prototype is returned.</p>
* <p>If all that fails, this method returns nil.</p>
*/
- (NSString *)externalType - (NSString *)externalType
{ {
if (_externalType) if (_externalType)
@ -668,6 +695,30 @@ RCS_ID("$Id$")
return [_prototype externalType]; return [_prototype externalType];
} }
/**
* <p>Returns a one character string identifiying the underlying
* C type of an NSNumber [valueTypeName]. The legal values in GDL2 are:</p>
* <ul>
* <li>@"c": char</li>
* <li>@"C": unsigned char</li>
* <li>@"s": short</li>
* <li>@"S": unsigned short</li>
* <li>@"i": int</li>
* <li>@"I": unsigned int</li>
* <li>@"l": long</li>
* <li>@"L": unsigned long</li>
* <li>@"u": long long</li>
* <li>@"U": unsigned long long</li>
* <li>@"f": float</li>
* <li>@"d": double</li>
* </ul>
* <p>If the valueType has not been set explicitly and the
* reciever [isFlattened], the valueClassName of the flattened
* attribute is returned.</p>
* <p>Otherwise, if the reciever has a prototype then the
* valueType of the prototype is returned.</p>
* <p>If all that fails, this method returns nil.</p>
*/
- (NSString *)valueType - (NSString *)valueType
{ {
if (_valueType) if (_valueType)
@ -906,9 +957,9 @@ return nexexp
ASSIGN(_valueType, type); ASSIGN(_valueType, type);
if ([_valueType length]==1) if ([_valueType length]==1)
_valueTypeChar=(char)[_valueType characterAtIndex:0]; _valueTypeCharacter = [_valueType characterAtIndex:0];
else else
_valueTypeChar='\0'; _valueTypeCharacter = '\0';
[self _setOverrideForKeyEnum: 4];//TODO [self _setOverrideForKeyEnum: 4];//TODO
} }
@ -1659,8 +1710,8 @@ More details:
{ {
if (valueClass == GDL2_NSNumberClass) if (valueClass == GDL2_NSNumberClass)
{ {
char valueTypeChar=[self _valueTypeChar]; unichar valueTypeCharacter = [self _valueTypeCharacter];
switch(valueTypeChar) switch(valueTypeCharacter)
{ {
case 'i': case 'i':
*valueP = [GDL2_alloc(NSNumber) *valueP = [GDL2_alloc(NSNumber)
@ -1854,17 +1905,26 @@ More details:
return [_prototype _valueClass]; return [_prototype _valueClass];
} }
- (char)_valueTypeChar /*
* This method returns the valueType as a unichar character.
* The value of the instance variable get set implicitly
* if the valueType is set explicitly with a legal value.
* Otherwise the effective valueType of reciever is used.
* TODO: Once this has been set later implicit changes to the
* valueType via flattend attrubutes or prototypes will not
* be honored. Value validation can be a hot spot so this method
* (or rather it's only use in validateValue:) should remain efficient.
*/
- (unichar)_valueTypeCharacter
{ {
char valueTypeChar=_valueTypeChar; unichar valueTypeCharacter = _valueTypeCharacter;
if (valueTypeChar=='\0') if (valueTypeCharacter == '\0')
{ {
// Compute it NSString* valueType = [self valueType];
NSString* valueType=[self valueType]; if ([valueType length] == 1)
if ([valueType length]==1) valueTypeCharacter = [valueType characterAtIndex:0];
valueTypeChar=(char)[valueType characterAtIndex:0];
} }
return valueTypeChar; return valueTypeCharacter;
}; };
@end @end

View file

@ -34,7 +34,7 @@
- (EOAttribute *)realAttribute; - (EOAttribute *)realAttribute;
- (Class)_valueClass; - (Class)_valueClass;
- (char)_valueTypeChar; - (unichar)_valueTypeCharacter;
@end @end
@interface EOAttribute (EOAttributePrivate2) @interface EOAttribute (EOAttributePrivate2)