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);                           stepengine.sdaiIsMember (stepengine.sdaiINTEGER, ref val);

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

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

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

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

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

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

sdaiUNICODE             const wchar_t* val = L"Any Unicode String";                 string val = "Any Unicode String";
                        sdaiIsMember (sdaiUNICODE, val);                            stepengine.sdaiIsMember (stepengine.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);                      stepengine.sdaiIsMember (stepengine.sdaiEXPRESSSTRING, val);

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

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

sdaiADB                 SdaiADB val = ...                                           int_t val = ...
                        sdaiIsMember (sdaiADB, val);                                stepengine.sdaiIsMember (stepengine.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 enginedll = @"engine.dll";

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x86_sdaiIsMember(Int32 aggregate, Int32 valueType, ref bool value);

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

public static bool sdaiIsMember(Int64 aggregate, Int64 valueType, ref bool value)
		{
			if (IntPtr.Size == 4)
			{
				bool _value = (bool)value;
				var _result = x86_sdaiIsMember((Int32)aggregate, (Int32)valueType, ref _value);
				value = _value;
				return _result;
			}
			else
			{
				return x64_sdaiIsMember(aggregate, valueType, ref value);
			}
		}

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x86_sdaiIsMember(Int32 aggregate, Int32 valueType, ref Int32 value);

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

public static bool sdaiIsMember(Int64 aggregate, Int64 valueType, ref Int64 value)
		{
			if (IntPtr.Size == 4)
			{
				Int32 _value = (Int32)value;
				var _result = x86_sdaiIsMember((Int32)aggregate, (Int32)valueType, ref _value);
				value = _value;
				return _result;
			}
			else
			{
				return x64_sdaiIsMember(aggregate, valueType, ref value);
			}
		}

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x86_sdaiIsMember(Int32 aggregate, Int32 valueType, Int32 value);

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x64_sdaiIsMember(Int64 aggregate, Int64 valueType, Int64 value);

public static bool sdaiIsMember(Int64 aggregate, Int64 valueType, Int64 value)
		{
			if (IntPtr.Size == 4)
			{
				var _result = x86_sdaiIsMember((Int32)aggregate, (Int32)valueType, (Int32)value);
				return _result;
			}
			else
			{
				return x64_sdaiIsMember(aggregate, valueType, value);
			}
		}

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x86_sdaiIsMember(Int32 aggregate, Int32 valueType, ref double value);

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

public static bool sdaiIsMember(Int64 aggregate, Int64 valueType, ref double value)
		{
			if (IntPtr.Size == 4)
			{
				double _value = (double)value;
				var _result = x86_sdaiIsMember((Int32)aggregate, (Int32)valueType, ref _value);
				value = _value;
				return _result;
			}
			else
			{
				return x64_sdaiIsMember(aggregate, valueType, ref value);
			}
		}

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x86_sdaiIsMember(Int32 aggregate, Int32 valueType, ref IntPtr value);

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

public static bool sdaiIsMember(Int64 aggregate, Int64 valueType, ref IntPtr value)
		{
			if (IntPtr.Size == 4)
			{
				IntPtr _value = (IntPtr)value;
				var _result = x86_sdaiIsMember((Int32)aggregate, (Int32)valueType, ref _value);
				value = _value;
				return _result;
			}
			else
			{
				return x64_sdaiIsMember(aggregate, valueType, ref value);
			}
		}

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x86_sdaiIsMember(Int32 aggregate, Int32 valueType, byte[] value);

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x64_sdaiIsMember(Int64 aggregate, Int64 valueType, byte[] value);

public static bool sdaiIsMember(Int64 aggregate, Int64 valueType, byte[] value)
		{
			if (IntPtr.Size == 4)
			{
				var _result = x86_sdaiIsMember((Int32)aggregate, (Int32)valueType, value);
				return _result;
			}
			else
			{
				return x64_sdaiIsMember(aggregate, valueType, value);
			}
		}

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x86_sdaiIsMember(Int32 aggregate, Int32 valueType, string value);

[DllImport(enginedll, EntryPoint = "sdaiIsMember")]
public static extern bool x64_sdaiIsMember(Int64 aggregate, Int64 valueType, string value);

public static bool sdaiIsMember(Int64 aggregate, Int64 valueType, string value)
		{
			if (IntPtr.Size == 4)
			{
				var _result = x86_sdaiIsMember((Int32)aggregate, (Int32)valueType, value);
				return _result;
			}
			else
			{
				return x64_sdaiIsMember(aggregate, valueType, 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)
...