//matrix determinent //the original matrix is saved in stead of destoryed, so the copy of //matrix is used double Matrix::det(void) { McoStatus status; int32 i, j, k; double **max, **temp; double returnval; //if not a square matrix, return singular error if( _row != _col){ _set_status(MCO_SINGULAR); return 0; } max = (double**)McoMalloc(sizeof( double*)*_row); if(!max){ _set_status(MCO_MEM_ALLOC_ERROR); return 0; } for( j = 0; j < _row; j++){ max[j] = (double*)McoMalloc(sizeof(double)*_col); if(!max[j]){ _set_status(MCO_MEM_ALLOC_ERROR); for(k = j-1; k >= 0; k--) McoFree((void *) max[k]); McoFree((void *) max); return 0.0; } } //copy the original matrix for( i = 0; i < _row; i++) for( j = 0; j < _col; j++) max[i][j] = _m[i][j]; temp = _m; _m = max; status = _ludcmp(); if(status != MCO_SUCCESS){ //singular matrix, everything assigned to 0 returnval = 0.0; } else { returnval = _m[0][0]; for( i = 1; i < _row; i++) returnval *= _m[i][i]; } for( i = 0; i < _row; i++) McoFree((void *) _m[i]); McoFree((void *) _m); _m = temp; return returnval; }
static void pan_add_cb (NMRemoteSettings *settings, NMRemoteConnection *connection, GError *error, gpointer user_data) { NmaBtDevice *self = NMA_BT_DEVICE (user_data); if (error) _set_status (self, _("Failed to create PAN connection: %s"), error->message); else _set_status (self, _("Your phone is now ready to use!")); recheck_services_enabled (self); _set_busy (self, FALSE); }
static void _dbus_cb_get_status(void *data, DBusMessage *reply, DBusError *error) { if (!_dbus_check_msg(reply, error)) return; _set_status(data, reply); }
static void dun_error (NmaBtDevice *self, const char *func, GError *error, const char *fallback) { g_warning ("%s: DUN error: %s", func, (error && error->message) ? error->message : fallback); _set_status (self, _("Error: %s"), (error && error->message) ? error->message : fallback); _set_busy (self, FALSE); dun_cleanup (self); recheck_services_enabled (self); }
//transverse of matrix Matrix& Matrix::T(void) { int32 i,j; double ** newm; double tempval; //added on 8/12 to take out smatrix class if( _row == _col){ for(i = 0; i < _row; i++){ for(j = i; j < _col; j++){ tempval = _m[i][j]; _m[i][j] = _m[j][i]; _m[j][i] = tempval; } } return *this; } //end of modification newm = (double**)McoMalloc(sizeof(double*)*_col); if(!newm){ _set_status(MCO_MEM_ALLOC_ERROR); return *this; } for(i = 0; i < _col; i++){ newm[i] = (double*)McoMalloc(sizeof(double)*_row); if(!newm[i]){ for(j = i-1; j >= 0; j--) McoFree((void *) newm[j]); McoFree((void *) newm); } } for( i = 0; i < _row; i++){ for(j = 0; j < _col; j++){ newm[j][i] = _m[i][j]; } } for(i = 0; i < _row; i++){ McoFree((void *) _m[i]); } McoFree((void *) _m); _m = newm; int32 temprow = _col; _col = _row; _row = temprow; return *this; }
void rgb_led_enable(void) { _set_status(LED_IS_ON); SHD_PORT &= ~SHD_PIN; power_timer2_enable(); rgb_counter = 0; //normal operation, just overflow TCCR2A = 0; TCCR2B = 1; //enable interrupts TIMSK2 |= _BV(TOIE2); sei(); }
static void _dbus_cb_status_change(void *data, DBusMessage *msg) { DBusMessageIter iter, array; dbus_message_iter_init(msg, &iter); if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_STRUCT) { _set_status(data, msg); } else if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT32) { /* XXX audacious.. */ _dbus_send_msg("/Player", "GetStatus", _dbus_cb_get_status, data); } _dbus_send_msg("/TrackList", "GetCurrentTrack", _dbus_cb_current_track, data); }
static void dun_start (NmaBtDevice *self) { NmaBtDevicePrivate *priv = NMA_BT_DEVICE_GET_PRIVATE (self); gboolean have_mm = FALSE, have_mm1 = TRUE; g_message ("%s: starting DUN device discovery...", __func__); _set_status (self, _("Detecting phone configuration...")); /* ModemManager stuff */ priv->mm_proxy = dbus_g_proxy_new_for_name (priv->bus, MM_SERVICE, MM_PATH, MM_INTERFACE); g_assert (priv->mm_proxy); have_mm = _name_has_owner (priv->bus, MM_SERVICE); dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, G_TYPE_BOXED, G_TYPE_INVALID); dbus_g_proxy_add_signal (priv->mm_proxy, "DeviceAdded", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID); dbus_g_proxy_connect_signal (priv->mm_proxy, "DeviceAdded", G_CALLBACK (modem_added), self, NULL); dbus_g_proxy_add_signal (priv->mm_proxy, "DeviceRemoved", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID); dbus_g_proxy_connect_signal (priv->mm_proxy, "DeviceRemoved", G_CALLBACK (modem_removed), self, NULL); #if WITH_MODEM_MANAGER_1 /* ModemManager1 stuff */ { priv->dbus_connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); if (priv->dbus_connection) { priv->modem_manager_1 = mm_manager_new_sync (priv->dbus_connection, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, NULL, NULL); if (priv->modem_manager_1) { g_signal_connect (priv->modem_manager_1, "object-added", G_CALLBACK (modem_object_added), self); g_signal_connect (priv->modem_manager_1, "object-removed", G_CALLBACK (modem_object_removed), self); } } have_mm1 = !!priv->modem_manager_1; } #endif /* Ensure at least one of ModemManager or ModemManager1 are around */ if (!have_mm && !have_mm1) { dun_error (self, __func__, NULL, _("ModemManager is not running")); return; } /* Bluez */ priv->dun_proxy = dbus_g_proxy_new_for_name (priv->bus, BLUEZ_SERVICE, priv->object_path, BLUEZ_SERIAL_INTERFACE); g_assert (priv->dun_proxy); priv->dun_timeout_id = g_timeout_add_seconds (45, dun_timeout_cb, self); g_message ("%s: calling Connect...", __func__); /* Watch for BT device property changes */ dbus_g_object_register_marshaller (_nma_marshal_VOID__STRING_BOXED, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID); dbus_g_proxy_add_signal (priv->dun_proxy, "PropertyChanged", G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID); dbus_g_proxy_connect_signal (priv->dun_proxy, "PropertyChanged", G_CALLBACK (dun_property_changed), self, NULL); /* Request a connection to the device and get the port */ dbus_g_proxy_begin_call_with_timeout (priv->dun_proxy, "Connect", dun_connect_cb, self, NULL, 20000, G_TYPE_STRING, "dun", G_TYPE_INVALID); g_message ("%s: waiting for Connect success...", __func__); }
//matrix inverse ( only matrix with _row == _col can be inversed //if the matrix is singular, 0 matrix will be given //mathod to use in matrix operation is singular value decomposition Matrix& Matrix::inv(void) { McoStatus status; int32 i, j, k; double **max; //if not a square matrix, return singular error if( _row != _col){ _set_status(MCO_SINGULAR); return *this; } status = _ludcmp(); if(status != MCO_SUCCESS){ //singular matrix, everything assigned to 0 for(i = 0; i < _row; i++) for(j = 0; j < _col; j++) _m[i][j] = 0.0; _set_status(MCO_SINGULAR); } else{ max = (double**)McoMalloc(sizeof(double*)*_row); if(!max){ _set_status(MCO_MEM_ALLOC_ERROR); return *this; } for( j = 0; j < _row; j++){ max[j] = (double*)McoMalloc(sizeof(double)*_col); if(!max[j]){ _set_status(MCO_MEM_ALLOC_ERROR); for(k = j-1; k >= 0; k--) McoFree((void *) max[k]); McoFree((void *) max); return *this; } } //set to a I matrix and solve the inverse for( i = 0; i < _row; i++){ for( j = 0; j < _col; j++) max[i][j] = 0.0; max[i][i] = 1.0; _lubksb(max[i]); } //fix on 8/12 //note!!, because the max contains the transverse of //of the inverse, do transverse and get it back double tempval; for( i = 0; i < _row; i++){ for( j = i; j < _col; j++){ tempval = max[i][j]; max[i][j] = max[j][i]; max[j][i] = tempval; } } //end of fix for( i = 0; i < _row; i++) McoFree((void *) _m[i]); McoFree((void *) _m); _m = max; } return *this; }
int d2save_set_expansion(d2save_t d2s, int val) { return _set_status(d2s, STATUSBIT_EXPANSION, val); }
int d2save_set_hardcore(d2save_t d2s, int val) { return _set_status(d2s, STATUSBIT_HARDCORE, val); }
int d2save_set_died(d2save_t d2s, int val) { return _set_status(d2s, STATUSBIT_DIED, val); }