Ejemplo n.º 1
0
ProcessParameter::ProcessParameter( const ProcessParameter& table, const IsoString& colId )
{
   m_data = new ProcessParameterPrivate( (*API->Process->GetTableColumnByName)( table.m_data->handle, colId.c_str() ) );
   if ( m_data->handle == nullptr )
   {
      if ( table.IsNull() )
         throw Error( "ProcessParameter: Null table parameter" );
      if ( colId.IsEmpty() )
         throw Error( "ProcessParameter: Empty table column parameter identifier specified" );
      if ( !colId.IsValidIdentifier() )
         throw Error( "ProcessParameter: Invalid table column parameter identifier specified: \'" + colId + '\'' );
      if ( !table.IsTable() )
         throw Error( "ProcessParameter: The specified parameter \'" + table.Id() + "\' is not a table parameter" );

      throw Error( "ProcessParameter: No table column parameter was found "
                   "with the specified identifier \'" + colId + "\' "
                   "for table parameter \'" + table.Id() + "\' "
                   "of process \'" + table.ParentProcess().Id() + '\'' );
   }
}
Ejemplo n.º 2
0
bool ProcessInstance::AllocateTableRows( const ProcessParameter& table, size_type rowCount )
{
   return (*API->Process->AllocateTableRows)( handle, table.Handle(), rowCount ) != api_false;
}
Ejemplo n.º 3
0
size_type ProcessInstance::TableRowCount( const ProcessParameter& table ) const
{
   return (*API->Process->GetTableRowCount)( handle, table.Handle() );
}
Ejemplo n.º 4
0
bool ProcessInstance::SetParameterValue( const Variant& value,
                                         const ProcessParameter& parameter, size_type rowIndex )
{
   if ( !value.IsValid() )
      return false;

   uint32 apiType = (*API->Process->GetParameterType)( parameter.Handle() ) & PTYPE_TYPE_MASK;
   if ( apiType == 0 )
      throw APIFunctionError( "GetParameterType" );

   if ( apiType == PTYPE_TABLE )
      throw Error( "ProcessInstance::SetParameterValue(): Invoked for a table parameter" );

   if ( apiType == PTYPE_STRING )
   {
      String s = value.ToString();
      return (*API->Process->SetParameterValue)( handle, parameter.Handle(), rowIndex, s.c_str(), s.Length() ) != api_false;
   }

   if ( apiType == PTYPE_BLOCK )
   {
      ByteArray a = value.ToByteArray();
      return (*API->Process->SetParameterValue)( handle, parameter.Handle(), rowIndex, a.Begin(), a.Length() ) != api_false;
   }

   union
   {
      uint32   u32;
      int32    i32;
      uint64   u64;
      int64    i64;
      float    f;
      double   d;
      api_bool b;
      api_enum e;
   }
   apiValue;

   switch ( apiType )
   {
   case PTYPE_UINT8:
   case PTYPE_UINT16:
   case PTYPE_UINT32:
      apiValue.u32 = value.ToUInt();
      break;
   case PTYPE_INT8:
   case PTYPE_INT16:
   case PTYPE_INT32:
      apiValue.i32 = value.ToInt();
      break;
   case PTYPE_UINT64:
      apiValue.u64 = value.ToUInt64();
      break;
   case PTYPE_INT64:
      apiValue.i64 = value.ToInt64();
      break;
   case PTYPE_FLOAT:
      apiValue.f = value.ToFloat();
      break;
   case PTYPE_DOUBLE:
      apiValue.d = value.ToDouble();
      break;
   case PTYPE_BOOL:
      apiValue.b = api_bool( value.ToBoolean() );
      break;
   case PTYPE_ENUM:
      apiValue.e = api_enum( value.ToInt() );
      break;
   default:
      throw Error( "ProcessParameter::SetParameterValue(): Internal error: Unknown parameter type" );
   }

   return (*API->Process->SetParameterValue)( handle, parameter.Handle(), rowIndex, &apiValue, 1 ) != api_false;
}
Ejemplo n.º 5
0
Variant ProcessInstance::ParameterValue( const ProcessParameter& parameter, size_type rowIndex ) const
{
   if ( parameter.IsNull() )
      return Variant();

   // First call to get the parameter type and length
   uint32 apiType = 0;
   size_type len = 0;
   (*API->Process->GetParameterValue)( handle, parameter.Handle(), rowIndex, &apiType, 0, &len );
   apiType &= PTYPE_TYPE_MASK;
   if ( apiType == 0 )
      throw APIFunctionError( "GetParameterValue" );

   if ( apiType == PTYPE_TABLE )
      throw Error( "ProcessInstance::ParameterValue(): Invoked for a table parameter" );

   if ( apiType == PTYPE_STRING )
   {
      String value;
      if ( len > 0 )
      {
         value.Reserve( len );
         if ( (*API->Process->GetParameterValue)( handle, parameter.Handle(),
                                                  rowIndex, &apiType, value.c_str(), &len ) == api_false )
            throw APIFunctionError( "GetParameterValue" );
      }
      return value;
   }

   if ( apiType == PTYPE_BLOCK )
   {
      ByteArray value( len );
      if ( len > 0 )
      {
         if ( (*API->Process->GetParameterValue)( handle, parameter.Handle(),
                                                  rowIndex, &apiType, value.Begin(), &len ) == api_false )
            throw APIFunctionError( "GetParameterValue" );
      }
      return value;
   }

   union
   {
      uint8    u8;
      int8     i8;
      uint16   u16;
      int16    i16;
      uint32   u32;
      int32    i32;
      uint64   u64;
      int64    i64;
      float    f;
      double   d;
      api_bool b;
      api_enum e;
   }
   value;

   if ( (*API->Process->GetParameterValue)( handle, parameter.Handle(),
                                            rowIndex, &apiType, &value, 0 ) == api_false )
      throw APIFunctionError( "GetParameterValue" );

   switch ( apiType )
   {
   case PTYPE_UINT8:  return value.u8;
   case PTYPE_INT8:   return value.i8;
   case PTYPE_UINT16: return value.u16;
   case PTYPE_INT16:  return value.i16;
   case PTYPE_UINT32: return value.u32;
   case PTYPE_INT32:  return value.i32;
   case PTYPE_UINT64: return value.u64;
   case PTYPE_INT64:  return value.i64;
   case PTYPE_FLOAT:  return value.f;
   case PTYPE_DOUBLE: return value.d;
   case PTYPE_BOOL:   return value.b;
   case PTYPE_ENUM:   return value.e;
   default:
      throw Error( "ProcessParameter::ParameterValue(): Internal error: Unknown parameter type" );
   }
}