示例#1
0
    double KMeansTrainer::assignClosestCenter(math::ConstMatrixReference<double, math::MatrixLayout::columnMajor> X, math::VectorReference<size_t, math::VectorOrientation::column> clusterAssignment)
    {
        auto D = pairwiseDistance(X, _means);

        double totalDist = 0;
        for (int i = 0; i < D.NumRows(); ++i)
        {
            auto dist = D.GetRow(i);
            auto minElement = std::min_element(dist.GetDataPointer(), dist.GetDataPointer() + dist.Size());
            clusterAssignment[i] = minElement - dist.GetDataPointer();
            totalDist += *minElement;
        }

        return totalDist;
    }
示例#2
0
// Return true if data was changed
bool CAccount::SetData(const std::string& strKey, const std::string& strValue, int iType)
{
    if (strValue == "false" && iType == LUA_TBOOLEAN)
    {
        if (HasData(strKey))
        {
            RemoveData(strKey);
            return true;
        }
    }
    else
    {
        CAccountData* pData = GetDataPointer(strKey);

        if (pData)
        {
            if (pData->GetType() != iType || pData->GetStrValue() != strValue)
            {
                pData->SetStrValue(strValue);
                pData->SetType(iType);
                return true;
            }
        }
        else
        {
            MapSet(m_Data, strKey, CAccountData(strKey, strValue, iType));
            return true;
        }
    }
    return false;
}
示例#3
0
std::shared_ptr<CLuaArgument> CAccount::GetData(const std::string& strKey)
{
    CAccountData* pData = GetDataPointer(strKey);
    auto          pResult = std::make_shared<CLuaArgument>();

    if (pData)
    {
        if (pData->GetType() == LUA_TBOOLEAN)
        {
            pResult->ReadBool(pData->GetStrValue() == "true");
        }
        else if (pData->GetType() == LUA_TNUMBER)
        {
            pResult->ReadNumber(strtod(pData->GetStrValue().c_str(), NULL));
        }
        else
        {
            pResult->ReadString(pData->GetStrValue());
        }
    }
    else
    {
        pResult->ReadBool(false);
    }
    return pResult;
}
int CAudioSourceMP3Cache::GetOutputData( void **pData, int samplePosition, int sampleCount, char copyBuf[AUDIOSOURCE_COPYBUF_SIZE] )
{
	// how many bytes are available ?
	int totalSampleCount = m_fileSize - samplePosition;

	// may be asking for a sample out of range, clip at zero
	if ( totalSampleCount < 0 )
		totalSampleCount = 0;

	// clip max output samples to max available
	if ( sampleCount > totalSampleCount )
		sampleCount = totalSampleCount;

	// if we are returning some samples, store the pointer
	if ( sampleCount )
	{
		*pData = GetDataPointer() + samplePosition;
		Assert( *pData );
	}

	return sampleCount;
}
示例#5
0
fwData::Image::sptr Resampler::resample(const fwData::Image::csptr& _img,
                                        const ::fwData::TransformationMatrix3D::csptr& _trf,
                                        const ::fwData::Image::SpacingType& _outputSpacing)
{
    using PointType           = ::itk::Point<double, 3>;
    using VectorContainerType = ::itk::VectorContainer<int, PointType>;
    using BoundingBoxType     = ::itk::BoundingBox<int, 3, double, VectorContainerType>;

    const auto& inputSize    = _img->getSize();
    const auto& inputOrigin  = _img->getOrigin();
    const auto& inputSpacing = _img->getSpacing();

    SLM_ASSERT("Image dimension must be 3.",
               inputOrigin.size() == 3 && inputSpacing.size() == 3 && inputSize.size() == 3);

    typename BoundingBoxType::Pointer inputBB = BoundingBoxType::New();

    const PointType min(inputOrigin.data());
    PointType max;
    for(std::uint8_t i = 0; i < 3; ++i)
    {
        max[i] = inputOrigin[i] + static_cast<double>(inputSize[i]) * inputSpacing[i];
    }

    inputBB->SetMinimum(min);
    inputBB->SetMaximum(max);

    const auto inputCorners = inputBB->GetCorners();
    const ::itk::Matrix<double, 4, 4> matrix(::fwItkIO::helper::Transform::convertToITK(_trf).GetInverse());

    // Apply transform matrix to all bounding box corners.
    typename VectorContainerType::Pointer outputCorners = VectorContainerType::New();
    outputCorners->Reserve(inputCorners->Size());
    std::transform(inputCorners->begin(), inputCorners->end(), outputCorners->begin(), [&matrix](const PointType& _in)
        {
            // Convert input to homogeneous coordinates.
            const ::itk::Point<double, 4> input(std::array<double, 4>({{_in[0], _in[1], _in[2], 1.}}).data());
            const auto p = matrix * input;
            return PointType(p.GetDataPointer());
        });

    // Compute the transformed axis aligned bounding box.
    typename BoundingBoxType::Pointer outputBB = BoundingBoxType::New();
    outputBB->SetPoints(outputCorners);
    outputBB->ComputeBoundingBox();

    // Compute output size and origin.
    ::fwData::Image::sptr output = ::fwData::Image::New();
    ::fwData::Image::OriginType outputOrigin(3);
    ::fwData::Image::SizeType outputSize(3);

    for(std::uint8_t i = 0; i < 3; ++i)
    {
        outputOrigin[i] = outputBB->GetMinimum()[i];
        outputSize[i]   = size_t((outputBB->GetMaximum()[i] - outputOrigin[i]) / _outputSpacing[i]);
    }

    output->setSize(outputSize);
    output->setSpacing(_outputSpacing);
    output->setOrigin(outputOrigin);

    resample(_img, output, _trf, output);
    return output;
}
示例#6
0
/**
 * @brief Main Entry Point
 *
 * @param argc      The number of arguments passed to this application.
 * @param argv      The array of arguments passed to this application.
 *
 * @return Non-important return value.
 */
int __cdecl main(int argc, char* argv[])
{
    // Display our project header..
    Console::output(Console::Colors::LightPurple, "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
    Console::output(Console::Colors::LightPurple, "-=-");
    Console::output(Console::Colors::LightCyan, "                 Steamless - Steam DRM Remover v1.0              ");
    Console::output(Console::Colors::LightPurple, "-=-\n");
    Console::output(Console::Colors::LightPurple, "-=-");
    Console::output(Console::Colors::LightYelllow, "                    by atom0s [[email protected]]                  ");
    Console::output(Console::Colors::LightPurple, "-=-\n");
    Console::output(Console::Colors::LightPurple, "-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n");

    // Ensure the argument count is valid..
    if (argc <= 1)
    {
        Console::output(Console::Colors::LightRed, "[*] ERROR: Invalid usage!\n");
        Console::output(Console::Colors::LightRed, "[*] ERROR: Usage is: Steamless.exe [file]\n");
        return 0;
    }

    // Ensure the given file exists..
    if (::GetFileAttributes(argv[1]) == INVALID_FILE_ATTRIBUTES)
    {
        Console::output(Console::Colors::LightRed, "[*] ERROR: Invalid input file; file does not exist!\n");
        return 0;
    }

    // Set the current working directory to the given input file..
    char szWorkingDirectory[MAX_PATH] = { 0 };
    strcpy_s(szWorkingDirectory, argv[1]);
    ::PathRemoveFileSpec(szWorkingDirectory);

    if (strlen(szWorkingDirectory) > 0)
        ::SetCurrentDirectory(szWorkingDirectory);

    // Load the input file for processing..
    auto file = new PEFile();
    if (!file->Initialize(argv[1]))
    {
        Console::output(Console::Colors::LightRed, "[*] ERROR: Failed to initialize PEFile wrapper. Invalid file maybe?\n");
        delete file;
        return 0;
    }

    // Determine if the file has the proper .bind section..
    if (!file->HasSection(".bind"))
    {
        Console::output(Console::Colors::LightRed, "[*] ERROR: Failed to locate .bind section, cannot process file!\n");
        delete file;
        return 0;
    }

    // Attempt to process the file..
    auto processed = [&]() -> bool
    {
        // Locate a known Steam signature by scanning for stub information..
        for (auto x = 0; x < _countof(g_Signatures); x++)
        {
            auto found = Utils::FindPattern((unsigned char*)file->GetDataPointer(), file->GetDataSize(), g_Signatures[x].Pattern, g_Signatures[x].Mask);
            if (found != 0)
            {
                Console::output(Console::Colors::LightGreen, "[*] INFO: Located Steam Stub! (%s)\n", g_Signatures[x].Name);
                return g_Signatures[x].Func(file, argv[1]);
            }
        }

        return false;
    }();

    if (!processed)
        Console::output(Console::Colors::LightRed, "[*] ERROR: Failed to process file!\n");
    else
        Console::output(Console::Colors::LightGreen, "[*] Successfully processed the file!\n");

    // Cleanup..
    delete file;
    file = nullptr;
    return 0;
}