예제 #1
0
	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);
}
예제 #3
0
	mat3 mat3::CreateIdentity()
	{
		return mat3(JFloat(0.0));
	}