fid.h File Reference

Classes

class   FId< T, KEYTYPE >
class   FId< T, InternedId >
class   PrivateGetFIdKeyType< T >
class   PrivateGetFIdKeyType< const char(&)[N]>
class   InternedIdSwitch
class   IdSwitch
class   DataIdSwitch
class   IdSwitchCheck< BASE >
class   RESTRICT

Namespaces

  maxon
  maxon::details

Macros

#define  FID (IID, TYPE)
#define  RESOURCE_DEFINE (ID, VAL)
#define  RESOURCE_DEFAULT (...)
#define  MAXON_RESOURCE_DATABASE_SCOPE (id)
#define  PRIVATE_RESOURCE_ID_CLASS (UID, IID, TYPE, BODY, ...)
#define  PRIVATE_RESOURCE_ID_DECL (STORAGE, UID)
#define  MAXON_ATTRIBUTE (TYPE, NAME, RID, ...)
#define  MAXON_ATTRIBUTE_CLASS (TYPE, NAME, RID, ...)
#define  MAXON_ATTRIBUTE_LOCAL (TYPE, NAME, RID, ...)
#define  ID_SWITCH (key)
#define  PRIVATE_ID_CASE (key, line)
#define  ID_CASE (key)

Typedefs

using  Group = void

函数

maxon::Id   PrivateGetDatabaseScope ()
  MAXON_MEMBERTYPE_DETECTOR (IsFidClass, FidType, std::false_type)
IdSwitchCheck< InternedIdSwitch >  GetIdSwitch (const InternedId &iid, OverloadRank2)
IdSwitchCheck< InternedIdSwitch >  GetIdSwitch (const InternedId *iid, OverloadRank2)
IdSwitchCheck< IdSwitch >  GetIdSwitch (const Id &id, OverloadRank1)
IdSwitchCheck< DataIdSwitch >  GetIdSwitch (const ConstDataPtr &data, OverloadRank0)
IdSwitchCheck< DataIdSwitch >  GetIdSwitch (const ForwardingDataPtr &data, OverloadRank0)
template<typename RESTRICT , Bool ONLYFID, typename KEY >
std::enable_if<!IsFidClass< KEY >::value, typename std::conditional< STD_IS_REPLACEMENT (reference, KEY)|| STD_IS_REPLACEMENT (const, KEY), ConstDataPtr, MoveDataPtr >::type >::type  ConvertKeyToDataPtr (KEY &&key)
template<typename RESTRICT , Bool ONLYFID, typename KEY >
std::enable_if< IsFidClass< KEY >::value, ConstDataPtr >::type  ConvertKeyToDataPtr (KEY &&key)
template<typename T >
RESTRICT  TestRestriction (T y, OverloadRank0)
  MAXON_MEMBERTYPE_DETECTOR (GetRestrict, RESTRICT_DICTIONARY_PROPS, maxon::RESTRICT )

Macro Definition Documentation

◆  FID

#define FID (   IID,
  TYPE 
)

Defines a resource id with type. E.g. FID(1000, Real) allows to set this type directly into a DataDictionary. The Set()/Get() of the DataDictionary then is type checked.

◆  RESOURCE_DEFINE

#define RESOURCE_DEFINE (   ID,
  VAL 
)

◆  RESOURCE_DEFAULT

#define RESOURCE_DEFAULT (   ... )

defines the default value

◆  MAXON_RESOURCE_DATABASE_SCOPE

#define MAXON_RESOURCE_DATABASE_SCOPE (   id )

◆  PRIVATE_RESOURCE_ID_CLASS

#define PRIVATE_RESOURCE_ID_CLASS (   UID,
  IID,
  TYPE,
  BODY,
  ...  
)

◆  PRIVATE_RESOURCE_ID_DECL

#define PRIVATE_RESOURCE_ID_DECL (   STORAGE,
  UID 
)

◆  MAXON_ATTRIBUTE

#define MAXON_ATTRIBUTE (   TYPE,
  NAME,
  RID,
  ...  
)

Declares a resource id with type in the current namespace. E.g.,

MAXON_ATTRIBUTE ( Vector32 , COLOR , 1000);

declares a resource id COLOR in the current namespace which uses 1000 as its key in dictionaries and has values of type Vector32 . You have to make sure that you don't use different resource ids with equal key in the same dictionary. TODO: (Anybody) naming convention.

参数
[in] TYPE The type of the values of this resource id.
[in] NAME The C++ name of the resource id. A global variable of that name will be added to the current namespace.
[in] RID The resource id to be used as key in dictionaries. This can be of any type which is supported by DataType. A c-string literal will be treated as an InternedId.
[in] ... Further information about the resource.
注意
The macro itself leaves incomplete code which is completed by the source processor. So you have to place the macro in a header file, because the source processor only scans header files, and you have to include the generated hxx files in the header file.

◆  MAXON_ATTRIBUTE_CLASS

#define MAXON_ATTRIBUTE_CLASS (   TYPE,
  NAME,
  RID,
  ...  
)

Declares a resource id with type as a class member in the current class. E.g.,

MAXON_ATTRIBUTE_CLASS ( Bool , WideningConversion, "widening" );

declares a resource id WideningConversion in the current class which uses "widening" as its key in dictionaries and has values of type Bool . You have to make sure that you don't use different resource ids with equal key in the same dictionary. TODO: (Anybody) naming convention.

参数
[in] TYPE The type of the values of this resource id.
[in] NAME The C++ name of the resource id. A static member variable of that name will be added to the current class.
[in] RID The resource id to be used as key in dictionaries. This can be of any type which is supported by DataType. A c-string literal will be treated as an InternedId.
[in] ... Further information about the resource.
注意
The macro itself leaves incomplete code which is completed by the source processor. So you have to place the macro in a header file, because the source processor only scans header files, and you have to include the generated hxx files in the header file.

◆  MAXON_ATTRIBUTE_LOCAL

#define MAXON_ATTRIBUTE_LOCAL (   TYPE,
  NAME,
  RID,
  ...  
)

Declares a resource id with type in the current namespace. Unlike the other MAXON_ATTRIBUTE macros, this macro has to be used in a cpp file. E.g.,

MAXON_ATTRIBUTE_LOCAL (IoMemoryRef, URL_MEMORY_REF, 'memo' );

declares a resource id URL_MEMORY_REF in the current namespace which uses 'memo' as its key in dictionaries and has values of type IoMemoryRef . You have to make sure that you don't use different resource ids with equal key in the same dictionary. TODO: (Anybody) naming convention.

参数
[in] TYPE The type of the values of this resource id.
[in] NAME The C++ name of the resource id. A static member variable of that name will be added to the current class.
[in] RID The resource id to be used as key in dictionaries. This can be of any type which is supported by DataType. A c-string literal will be treated as an InternedId.
[in] ... Further information about the resource.

◆  ID_SWITCH

#define ID_SWITCH (   key )

ID_SWITCH and ID_CASE allow to use Id or InternedId values in a switch statement. ID_SWITCH has to wrap the switch expression, it supports switch expressions of type Id, InternedId, pointer to InternedId or ConstDataPtr/ForwardingDataPtr. Each case label has to be wrapped by ID_CASE , this supports ids that are declared by MAXON_DECLARATION, MAXON_ATTRIBUTE, #CLASS_RESOURCE_ID, #RESOURCE_AUTOID or #CLASS_RESOURCE_AUTOID. Example:

switch ( ID_SWITCH (key)) { case ID_CASE (STREAMFLAGS::HTTP_REMOTEADDRESS): return Data(_httpFile.GetRemoteAddr()); break ; case ID_CASE (STREAMFLAGS::HTTP_HEADER): return Data(_httpFile.GetHeader()); break ; }
参数
[in] key The key to be used for the switch expression.
注意
These macros also support fallthroughs and multiple values for a single case block. Nesting of switch statements will most likely cause a warning about a shadowed local variable because each ID_SWITCH macro declares a local variable of name privateSwitchId in the scope of the switch statement.
You will get a compile-time error in the rare case that two ids have the same hashcode. In this case you can't use a switch statement, you have to use if statements instead.

◆  PRIVATE_ID_CASE

#define PRIVATE_ID_CASE (   key,
  line 
)

◆  ID_CASE

#define ID_CASE (   key )

ID_SWITCH and ID_CASE allow to use InternedId values in a switch statement, see ID_SWITCH .

参数
[in] key The key to be used for the case.

Function Documentation

◆  PrivateGetDatabaseScope()

maxon::Id PrivateGetDatabaseScope ( )
maxon::Vec3< maxon::Float32, 1 >
MAXON_ATTRIBUTE_LOCAL
#define MAXON_ATTRIBUTE_LOCAL(TYPE, NAME, RID,...)
定义: fid.h:182
MAXON_ATTRIBUTE_CLASS
#define MAXON_ATTRIBUTE_CLASS(TYPE, NAME, RID,...)
定义: fid.h:165
COLOR
COLOR
Vector.
定义: c4d_basebitmap.h:7
ID_SWITCH
#define ID_SWITCH(key)
定义: fid.h:331
ID_CASE
#define ID_CASE(key)
定义: fid.h:344
Bool
maxon::Bool Bool
定义: ge_sys_math.h:53
MAXON_ATTRIBUTE
#define MAXON_ATTRIBUTE(TYPE, NAME, RID,...)
定义: fid.h:146