sdaiIsMember

The function determines whether the specified primitive or instance value is contained in the aggregate. In the case of aggregate members represented by ADBs, both the data value and data type are compared. Table 1 shows type of buffer the caller should provide depending on the valueType for sdaiIsMember, and it works similarly for all put-functions. Note: with SDAI API it is impossible to check buffer type at compilation or execution time and this is responsibility of a caller to ensure that requested valueType is matching with the value argument, a mismatch will lead to unpredictable results.

Table 1 – Required value buffer depending on valueType (on the example of sdaiIsMember but valid for all put-functions)

valueType               C/C++                                                       C#

sdaiINTEGER             int_t val = 123;                                            int_t val = 123;
                        sdaiIsMember (sdaiINTEGER, &val);                           ifcengine.sdaiIsMember (ifcengine.sdaiINTEGER, ref val);

sdaiREAL or sdaiNUMBER  double val = 123.456;                                       double val = 123.456;
                        sdaiIsMember (sdaiREAL, &val);                              ifcengine.sdaiIsMember (ifcengine.sdaiREAL, ref val);

sdaiBOOLEAN             SdaiBoolean val = sdaiTRUE;                                 bool val = true;
                        sdaiIsMember (sdaiBOOLEAN, &val);                           ifcengine.sdaiIsMember (ifcengine.sdaiBOOLEAN, ref val);

sdaiLOGICAL             const TCHAR* val = "U";                                     string val = "U";
                        sdaiIsMember (sdaiLOGICAL, val);                            ifcengine.sdaiIsMember (ifcengine.sdaiLOGICAL, val);

sdaiENUM                const TCHAR* val = "NOTDEFINED";                            string val = "NOTDEFINED";
                        sdaiIsMember (sdaiENUM, val);                               ifcengine.sdaiIsMember (ifcengine.sdaiENUM, val);

sdaiBINARY              const TCHAR* val = "0123456ABC";                            string val = "0123456ABC";
                        sdaiIsMember (sdaiBINARY, val);                             ifcengine.sdaiIsMember (ifcengine.sdaiBINARY, val);

sdaiSTRING              const char* val = "My Simple String";                       string val = "My Simple String";
                        sdaiIsMember (sdaiSTRING, val);                             ifcengine.sdaiIsMember (ifcengine.sdaiSTRING, val);

sdaiUNICODE             const wchar_t* val = L"Any Unicode String";                 string val = "Any Unicode String";
                        sdaiIsMember (sdaiUNICODE, val);                            ifcengine.sdaiIsMember (ifcengine.sdaiUNICODE, val);

sdaiEXPRESSSTRING       const char* val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";  string val = "EXPRESS format, i.e. \\X2\\00FC\\X0\\";
                        sdaiIsMember (sdaiEXPRESSSTRING, val);                      ifcengine.sdaiIsMember (ifcengine.sdaiEXPRESSSTRING, val);

sdaiINSTANCE            SdaiInstance val = ...                                      int_t val = ...
                        sdaiIsMember (sdaiINSTANCE, val);                           ifcengine.sdaiIsMember (ifcengine.sdaiINSTANCE, val);

sdaiAGGR                SdaiAggr val = ...                                          int_t val = ...
                        sdaiIsMember (sdaiAGGR, val);                               ifcengine.sdaiIsMember (ifcengine.sdaiAGGR, val);

sdaiADB                 SdaiADB val = ...                                           int_t val = ...
                        sdaiIsMember (sdaiADB, val);                                ifcengine.sdaiIsMember (ifcengine.sdaiADB, val);
TCHAR is “char” or “wchar_t” depending on setStringUnicode. (Non-standard behavior) sdaiLOGICAL behaves differently from ISO 10303-24-2001: it expects char* while standard declares int_t.
Table 2 - valueType can be requested depending on actual model data.

valueType       Works for following values in the model
                  integer      real     .T. or .F.     .U.      other enum    binary      string     instance      list      $ (empty)
sdaiINTEGER         Yes          .           .           .           .           .           .           .           .           .
sdaiREAL             .          Yes          .           .           .           .           .           .           .           .
sdaiNUMBER           .          Yes          .           .           .           .           .           .           .           .
sdaiBOOLEAN          .           .          Yes          .           .           .           .           .           .           .
sdaiLOGICAL          .           .          Yes         Yes          .           .           .           .           .           .
sdaiENUM             .           .          Yes         Yes         Yes          .           .           .           .           .
sdaiBINARY           .           .           .           .           .          Yes          .           .           .           .
sdaiSTRING           .           .           .           .           .           .          Yes          .           .           .
sdaiUNICODE          .           .           .           .           .           .          Yes          .           .           .
sdaiEXPRESSSTRING    .           .           .           .           .           .          Yes          .           .           .
sdaiINSTANCE         .           .           .           .           .           .           .          Yes          .           .
sdaiAGGR             .           .           .           .           .           .           .           .          Yes          .
sdaiADB             Yes         Yes         Yes         Yes         Yes         Yes         Yes         Yes         Yes          .

Syntax

public const string ifcenginedll = @"ifcengine.dll";

[DllImport(IFCEngineDLL, EntryPoint = "sdaiIsMember")]
public static extern Int64 sdaiIsMember(int_t aggregate, int_t valueType, ref bool value);

[DllImport(IFCEngineDLL, EntryPoint = "sdaiIsMember")]
public static extern Int64 sdaiIsMember(int_t aggregate, int_t valueType, ref int_t value);

[DllImport(IFCEngineDLL, EntryPoint = "sdaiIsMember")]
public static extern Int64 sdaiIsMember(int_t aggregate, int_t valueType, int_t value);

[DllImport(IFCEngineDLL, EntryPoint = "sdaiIsMember")]
public static extern Int64 sdaiIsMember(int_t aggregate, int_t valueType, ref double value);

[DllImport(IFCEngineDLL, EntryPoint = "sdaiIsMember")]
public static extern Int64 sdaiIsMember(int_t aggregate, int_t valueType, ref IntPtr value);

[DllImport(IFCEngineDLL, EntryPoint = "sdaiIsMember")]
public static extern Int64 sdaiIsMember(int_t aggregate, int_t valueType, byte[] value);

[DllImport(IFCEngineDLL, EntryPoint = "sdaiIsMember")]
public static extern Int64 sdaiIsMember(int_t aggregate, int_t valueType, string value);    

Property aggregate

Size: 64 bit / 8 byte (reference)
...

Property valueType

Size: 64 bit / 8 byte (value)
...

Property value

Size: 64 bit / 8 byte (reference)
...