示例#1
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::NewXMLFile(XMLDOMDocumentPtr& doc,
                          const wchar_t* pszRootName,
                          const wchar_t* pszEncoding,
                          const wchar_t* pszNameSpace,
                          const wchar_t* comment)
{
    LocalHResult hr;

    doc = NULL;
    if (FAILED(hr = doc.CreateInstance(CLSID_XmlDocument60))
        && FAILED(hr = doc.CreateInstance(CLSID_XmlDocument40)))
    {
#ifdef X3LOG_WARNING2
        X3LOG_WARNING2(L"@ConfigXml:IDS_CREATEINSTANCE_FAIL", L"CLSID_XmlDocument");
#endif
        return false;
    }

    XMLDOMNodePtr pDocNode (doc);

    std::wstring strHeader = L"version=\"1.0\" encoding=\"";
    strHeader += pszEncoding;
    strHeader += L"\"";
    XMLDOMProcessingInstructionPtr pHeader;
    hr = doc->createProcessingInstruction(
        _bstr_t(L"xml"), _bstr_t(strHeader.c_str()), &pHeader);
    hr = pDocNode->appendChild(pHeader, NULL);

    if (IsNotEmpty(comment))
    {
        XMLDOMComment* pComment = NULL;
        hr = doc->createComment(_bstr_t(comment), &pComment);
        if (pComment != NULL)
        {
            hr = doc->appendChild(XMLDOMNodePtr(pComment), NULL);
            pComment->Release();
        }
    }

    // Create root node
    if (IsNotEmpty(pszRootName))
    {
        VARIANT type;
        V_VT(&type) = VT_INT;
        V_INT(&type) = XML::NODE_ELEMENT;
        XMLDOMNodePtr pRoot;
        hr = doc->createNode(type, _bstr_t(pszRootName), _bstr_t(pszNameSpace), &pRoot);
        hr = pDocNode->appendChild(pRoot, NULL);
    }

    return true;
}
示例#2
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::SaveXMLFile(const XMLDOMDocumentPtr& doc,
                           const wchar_t* filename,
                           IXmlFileCrypt* pCryptHandler)
{
    LocalHResult hr = E_INVALIDARG;
    if (!IsNotEmpty(filename))
        return false;

    VARIANT vt;
    V_VT(&vt) = VT_BSTR;
    V_BSTR(&vt) = ::SysAllocString(filename);

    try
    {
        hr = doc->save(vt);
    }
    catch (...)
    {
        hr = E_FAIL;
    }

    if (vt.bstrVal != NULL)
    {
        ::SysFreeString(vt.bstrVal);
    }

    if (SUCCEEDED(hr) && pCryptHandler)
    {
        pCryptHandler->CryptFile(filename);
    }

    return SUCCEEDED(hr);
}
示例#3
0
文件: xmlutil.cpp 项目: cw2018/xtpui
long CXmlUtil::FindElementByAttr(XMLDOMElementPtr& outEle,
                                 const XMLDOMElementPtr& parent,
                                 const wchar_t* pszElement,
                                 const wchar_t* pszAttr1,
                                 const wchar_t* value1,
                                 const wchar_t* pszAttr2,
                                 const wchar_t* value2)
{
    NL(pszAttr1); NL(value1); NL(pszAttr2); NL(value2);
    XMLDOMElementPtr ele;
    long i = GetChildCount(parent, pszElement);

    outEle = NULL;
    while (--i >= 0)
    {
        if (GetChild(ele, parent, pszElement, i))
        {
            if (_wcsicmp(GetAttribute(ele, pszAttr1).c_str(), value1) == 0
                && (!IsNotEmpty(pszAttr2) || _wcsicmp(
                    GetAttribute(ele, pszAttr2).c_str(), value2) == 0))
            {
                outEle = ele;
                break;
            }
        }
    }

    return i;
}
示例#4
0
// Tendo o pai como referência, o mesmo é comparado com seus filhos e trocado
// caso a sua prioridade seja maior que a de um deles.
void DownwardsMin(Heap *intervals, int position) {

    //Assume que o filho de menor valor é o da esquerda.
    int lowest_son_position = 2*position+1;
    bool stop = false;

    // Enquanto o vetor ainda estiver sendo percorrido e o pai
    // não ser menor que ambos seus filhos...
    while((!stop) && (lowest_son_position < (*intervals).size)) {
        // Caso os filhos da direita e esquerda existirem e o valor atual do
        // filho de menor valor for maior que o do irmão, significa que a
        // posição do filho de menor valor é a posição do irmão.
        int father_value = (*intervals).node[position].min;
        if(BrotherHasLowerValue((*intervals), lowest_son_position)){
            lowest_son_position += 1;
            // Garante que o valor a ser utilizado é o correto.
            AssignValues(&(*intervals).node[lowest_son_position]);
        }

        // Caso o pai possua prioridade maior que a do filho de menor prioridade,
        // troca os valores de ambos entre si. A verificação é feita para ambos
        // os extremos do intervalo.
        if((father_value > (*intervals).node[lowest_son_position].min)
            && IsNotEmpty((*intervals).node[lowest_son_position].min)) {

            SwapValues(&(*intervals).node[position].min,
                        &(*intervals).node[lowest_son_position].min);

        } else if ((father_value > (*intervals).node[lowest_son_position].max)
            && IsNotEmpty((*intervals).node[lowest_son_position].max)) {

            SwapValues(&(*intervals).node[position].min,
                        &(*intervals).node[lowest_son_position].max);

        //Caso o pai esteja na posição correta, interrompe o loop.
        } else  {
            stop = true;
        }
        position = lowest_son_position;
        lowest_son_position = (2 * lowest_son_position) + 1;
        //Ajusta os valores máximo e mínimo, caso necessário.
        AssignValues(&(*intervals).node[position]);
    }
    AssignValues(&(*intervals).node[position]);
}
示例#5
0
int main() {
    int initial_number_of_elements;

    // Cria um novo heap a partir da entrada.
    scanf("%d", &initial_number_of_elements);

    Heap interval_heap;
    interval_heap = CreateHeap(initial_number_of_elements);

    // Realiza as operações requisitadas;
    char operator;
    scanf("%c", &operator);
    while ((operator != 'f') && (operator != 'F')) {
        if(operator == 'm'){
            int value_removed = RemoveLowestPriority(&interval_heap);
            if(IsNotEmpty(value_removed)) {
              printf("%d\n", value_removed);
            }
        } else if(operator == 'M') {
            int value_removed = RemoveHighestPriority(&interval_heap);
            if(IsNotEmpty(value_removed)) {
              printf("%d\n", value_removed);
            }
        } else if(operator == 'i') {
            int priority_new_element;
            scanf("%d", &priority_new_element);
            interval_heap = InsertNewElement(interval_heap, priority_new_element);
        }
        // for(int i = 0; i < interval_heap.size; i++) {
        //     printf("min = %d // max = %d\n", interval_heap.node[i].min, interval_heap.node[i].max);
        // }
        // printf("--------------------------------------\n");
        scanf("%c", &operator);
    }
    printf("\n");
    printf("Min-heap:");
    PreOrderMin(interval_heap, 0);
    printf(" \n");
    printf("Max-heap:");
    PreOrderMax(interval_heap, 0);
    printf(" \n");
    return 0;
}
示例#6
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::LoadXMLFile(XMLDOMDocumentPtr& doc,
                           const wchar_t* filename,
                           IXmlFileCrypt* pCryptHandler)
{
    LocalHResult hr;
    if (!IsNotEmpty(filename))
        return false;

    if (pCryptHandler && pCryptHandler->Decrypt(doc, filename))
    {
        ASSERT(doc != NULL);
        return true;
    }

    doc = NULL;
    if (FAILED(hr = doc.CreateInstance(CLSID_XmlDocument60))
        && FAILED(hr = doc.CreateInstance(CLSID_XmlDocument40)))
    {
#ifdef X3LOG_WARNING2
        X3LOG_WARNING2(L"@ConfigXml:IDS_CREATEINSTANCE_FAIL", L"CLSID_XmlDocument");
#endif
        return false;
    }

    VARIANT vt;
    V_VT(&vt) = VT_BSTR;
    V_BSTR(&vt) = ::SysAllocString(filename);

    try
    {
        VARIANT_BOOL bLoad = VARIANT_FALSE;
        hr = doc->put_async(VARIANT_FALSE);
        if (FAILED(hr = doc->load(vt, &bLoad)) || !bLoad)
        {
            OutputParseError(doc, filename);
            doc = NULL;
        }
    }
    catch (...)
    {
        hr = E_FAIL;
    }

    if (vt.bstrVal != NULL)
        ::SysFreeString(vt.bstrVal);

    return SUCCEEDED(hr) && (doc != NULL);
}
示例#7
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::SetAttribute(const XMLDOMDocumentPtr&,
                            const XMLDOMElementPtr& ele,
                            const wchar_t* name,
                            const wchar_t* value)
{
    LocalHResult hr;
    bool bRet = false;

    if (IsNotEmpty(name) && ele != NULL)
    {
        hr = ele->setAttribute(_bstr_t(name), _variant_t(value));
        bRet = SUCCEEDED(hr);
    }

    return bRet;
}
示例#8
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::DelAttribute(const XMLDOMElementPtr& ele,
                            const wchar_t* name)
{
    LocalHResult hr;
    XMLDOMAttributePtr node = NULL;

    if (ele != NULL && IsNotEmpty(name))
        hr = ele->getAttributeNode(_bstr_t(name), &node);

    if (node != NULL)
    {
        XMLDOMElementPtr pItem(node);
        return SUCCEEDED(hr = ele->removeChild(pItem, NULL));
    }

    return false;
}
示例#9
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::AddChild(XMLDOMElementPtr& outEle,
                        const XMLDOMDocumentPtr& doc,
                        const XMLDOMElementPtr& ele,
                        const wchar_t* pszChildName)
{
    LocalHResult hr;
    XMLDOMElementPtr pRet = NULL;

    outEle = NULL;
    if (doc != NULL && ele != NULL && IsNotEmpty(pszChildName))
        hr = doc->createElement(_bstr_t(pszChildName), &pRet);
    if (pRet != NULL)
    {
        hr = ele->appendChild(pRet, NULL);
        outEle = pRet;
    }

    return outEle != NULL;
}
示例#10
0
文件: xmlutil.cpp 项目: cw2018/xtpui
static long GetChildIndex(const XMLDOMElementPtr& ele,
                          const wchar_t* pszChildName,
                          long nMaxIndex,
                          XMLDOMNodePtr& pRet)
{
    LocalHResult hr;
    pRet = NULL;

    if (!IsNotEmpty(pszChildName) || NULL == ele)
        return 0;

    long n = 0, nCount = 0;
    XMLDOMNodeListPtr nl;

    hr = ele->get_childNodes(&nl);
    if (nl != NULL)
    {
        hr = nl->get_length(&n);
        for (int i = 0; i < n; i++)
        {
            XMLDOMNodePtr node;
            hr = nl->get_item(i, &node);
            if (NULL == node)
                continue;

            BSTR bstr = NULL;
            hr = node->get_nodeName(&bstr);
            if (bstr != NULL && _wcsicmp(bstr, pszChildName) == 0)
            {
                nCount++;
                if (nCount > nMaxIndex)
                {
                    pRet = node;
                    ::SysFreeString(bstr);
                    break;
                }
            }
            ::SysFreeString(bstr);
        }
    }

    return nCount;
}
示例#11
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::CreateNodeComment(const XMLDOMDocumentPtr& doc,
                                 const XMLDOMElementPtr& ele,
                                 const wchar_t* comment)
{
    LocalHResult hr;
    if (doc != NULL && ele != NULL && IsNotEmpty(comment))
    {
        XMLDOMComment* pComment = NULL;
        hr = doc->createComment(_bstr_t(comment), &pComment);
        if (pComment != NULL)
        {
            hr = ele->appendChild(XMLDOMNodePtr(pComment), NULL);
            pComment->Release();

            return true;
        }
    }

    return false;
}
示例#12
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::CreateDocComment(const XMLDOMDocumentPtr& doc,
                                const wchar_t* comment)
{
    LocalHResult hr;
    if (doc != NULL && IsNotEmpty(comment))
    {
        XMLDOMElementPtr ele;
        hr = doc->get_documentElement(&ele);

        XMLDOMComment* pComment = NULL;
        hr = doc->createComment(_bstr_t(comment), &pComment);
        if (pComment != NULL)
        {
            hr = doc->insertBefore(XMLDOMNodePtr(pComment), _variant_t(ele), NULL);
            pComment->Release();

            return true;
        }
    }

    return false;
}
示例#13
0
文件: xmlutil.cpp 项目: cw2018/xtpui
bool CXmlUtil::GetChildOrAdd(XMLDOMElementPtr& outEle,
                             const XMLDOMDocumentPtr& doc,
                             const XMLDOMElementPtr& parent,
                             const wchar_t* pszChildName)
{
    LocalHResult hr;
    outEle = NULL;

    if (!IsNotEmpty(pszChildName) || NULL == parent)
        return false;

    XMLDOMNodePtr pRet = NULL;
    GetChildIndex(parent, pszChildName, 0, pRet);
    outEle = pRet;

    if (NULL == outEle)
    {
        hr = doc->createElement(_bstr_t(pszChildName), &outEle);
        hr = parent->appendChild(outEle, NULL);
    }

    return outEle != NULL;
}
示例#14
0
文件: xmlutil.cpp 项目: cw2018/xtpui
std::wstring CXmlUtil::GetAttribute(const XMLDOMElementPtr& ele,
                                    const wchar_t* name,
                                    const wchar_t* defaultText)
{
    NL(defaultText);
    std::wstring strValue (defaultText);
    XMLDOMAttributePtr node = NULL;
    LocalHResult hr;

    if (IsNotEmpty(name) && ele != NULL)
        hr = ele->getAttributeNode(_bstr_t(name), &node);
    if (node != NULL)
    {
        BSTR bstr = NULL;
        hr = node->get_text(&bstr);
        if (bstr != NULL)
        {
            strValue = bstr;
            ::SysFreeString(bstr);
        }
    }

    return strValue;
}
示例#15
0
bool IsNotSchemaEmpty(const SqlId& table, const SqlBool& cond, Sql& cursor)
{
    return IsNotEmpty(Select(1).FromSchema(table).Where(cond), cursor);
}
示例#16
0
bool IsNotEmpty(const SqlVal& table, SqlId column, const Value& value, Sql& cursor)
{
    return IsNotEmpty(table, column == value, cursor);
}
示例#17
0
bool IsNotEmpty(const SqlVal& table, const SqlBool& cond, Sql& cursor)
{
    return IsNotEmpty(Select(1).From(table).Where(cond), cursor);
}