mat3 mat3::InvertMatrix() { const JFloat determinant = GetDeterminant(); mat3 inverse; if (determinant != JFloat(0.0)) { const JFloat inverseDeterminant = 1.0f / determinant; inverse.column0.x = inverseDeterminant * (column1.y * column2.z - column2.y * column1.z); inverse.column0.y = inverseDeterminant *-(column0.y * column2.z - column2.y * column0.z); inverse.column0.z = inverseDeterminant * (column0.y * column1.z - column0.z * column1.y); inverse.column1.x = inverseDeterminant *-(column1.x * column2.z - column1.z * column2.x); inverse.column1.y = inverseDeterminant * (column0.x * column2.z - column0.z * column2.x); inverse.column1.z = inverseDeterminant *-(column0.x * column1.z - column0.z * column1.x); inverse.column2.x = inverseDeterminant * (column1.x * column2.y - column1.y * column2.x); inverse.column2.y = inverseDeterminant *-(column0.x * column2.y - column0.y * column2.x); inverse.column2.z = inverseDeterminant * (column0.x * column1.y - column1.x * column0.y); return inverse; } else { return CreateIdentity(); } }
void GPMProcessEntry::Update ( const JFloat elapsedTime ) { itsPercentMemory = 0; #ifdef _J_HAS_PROC try { ReadStat(); ReadStatM(); JSize mem; if (GPMGetSystemMemory(&mem)) { itsPercentMemory = JFloat(itsResident * 100) / mem; } // shared across #if ReadCmdline(); // not in ctor, to make ctor faster } catch (...) { itsState = kZombie; // std::cerr << "failed to update: " << itsPID << std::endl; } #elif defined _J_HAS_SYSCTL { int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, itsPID }; kinfo_proc entry; size_t len = sizeof(entry); int result = sysctl(mib, 4, &entry, &len, NULL, 0); if (result != 0) { itsState = kZombie; } else { itsCommand = entry.kp_proc.p_comm; itsPPID = entry.kp_eproc.e_ppid; itsPriority = entry.kp_proc.p_priority; itsNice = entry.kp_proc.p_nice; itsSize = 0; itsResident = 0; itsShare = 0; itsUTime = entry.kp_proc.p_uticks; itsSTime = entry.kp_proc.p_sticks; if (entry.kp_proc.p_stat == SSLEEP) { itsState = kSleep; } else if (entry.kp_proc.p_stat == SSTOP) { itsState = kStopped; } else if (entry.kp_proc.p_stat == SZOMB) { itsState = kZombie; } else { itsState = kRun; } JSize mem; if (GPMGetSystemMemory(&mem)) { itsPercentMemory = JFloat(itsResident) / mem; } } // shared across #if ReadCmdline(); // not in ctor, to make ctor faster } #endif SetName(itsCommand); ShouldBeOpenable(HasChildren()); itsTime = (itsUTime + itsSTime) / sysconf(_SC_CLK_TCK); JSize totalTime = (itsLastUTime == 0 || itsLastSTime == 0) ? 0 : (itsUTime - itsLastUTime) + (itsSTime - itsLastSTime); itsLastUTime = itsUTime; itsLastSTime = itsSTime; itsPercentCPU = elapsedTime == 0 || itsState == kZombie ? 0 : JFloat(totalTime * 1000 / sysconf(_SC_CLK_TCK)) / (10 * elapsedTime); }
mat3 mat3::CreateIdentity() { return mat3(JFloat(0.0)); }