Пример #1
0
    void DiMotionSerializerImpl::WriteAnimation( const DiAnimation* pkAnimation )
    {
        WriteChunkHeader(DI_ANIMATION,CalcAnimationSize(pkAnimation));

        // name
        WriteString(pkAnimation->GetName());

        // length
        float len = pkAnimation->GetLength();
        WriteFloats(&len, 1);

        auto trackIt = pkAnimation->GetNodeClipsIterator();
        while(trackIt.HasMoreElements())
        {
            WriteNodeClip(trackIt.GetNext());
        }

        auto attachIt = pkAnimation->GetAttachClipsIterator();
        while(attachIt.HasMoreElements())
        {
            DiNodeClip * pAttach = attachIt.GetNext();
            WriteAttachClip(pAttach);
        }

    }
NS_IMETHODIMP
nsIEHistoryEnumerator::HasMoreElements(bool* _retval)
{
  *_retval = false;

  EnsureInitialized();
  MOZ_ASSERT(mURLEnumerator, "Should have instanced an IE History URLEnumerator");
  if (!mURLEnumerator)
    return NS_OK;

  STATURL statURL;
  ULONG fetched;

  // First argument is not implemented, so doesn't matter what we pass.
  HRESULT hr = mURLEnumerator->Next(1, &statURL, &fetched);
  if (FAILED(hr) || fetched != 1UL) {
    // Reached the last entry.
    return NS_OK;
  }

  nsCOMPtr<nsIURI> uri;
  if (statURL.pwcsUrl) {
    nsDependentString url(statURL.pwcsUrl);
    nsresult rv = NS_NewURI(getter_AddRefs(uri), url);
    ::CoTaskMemFree(statURL.pwcsUrl);
    if (NS_FAILED(rv)) {
      // Got a corrupt or invalid URI, continue to the next entry.
      return HasMoreElements(_retval);
    }
  }

  nsDependentString title(statURL.pwcsTitle ? statURL.pwcsTitle : L"");

  bool lastVisitTimeIsValid;
  PRTime lastVisited = WinMigrationFileTimeToPRTime(&(statURL.ftLastVisited), &lastVisitTimeIsValid);

  mCachedNextEntry = do_CreateInstance("@mozilla.org/hash-property-bag;1");
  MOZ_ASSERT(mCachedNextEntry, "Should have instanced a new property bag");
  if (mCachedNextEntry) {
    mCachedNextEntry->SetPropertyAsInterface(NS_LITERAL_STRING("uri"), uri);
    mCachedNextEntry->SetPropertyAsAString(NS_LITERAL_STRING("title"), title);
    if (lastVisitTimeIsValid) {
      mCachedNextEntry->SetPropertyAsInt64(NS_LITERAL_STRING("time"), lastVisited);
    }

    *_retval = true;
  }

  if (statURL.pwcsTitle)
    ::CoTaskMemFree(statURL.pwcsTitle);

  return NS_OK;
}
Пример #3
0
/**
 * Prints graph structure in stderr.
 */
void vf_Graph::DumpGraph()
{
#if _VF_DEBUG
    VF_DEBUG("Method: " << class_get_name(m_ctx->m_class) << "::"
             << m_ctx->m_name << m_ctx->m_descriptor << endl);
    VF_DEBUG("-- start --");
    ResetNodeIterator();
    while (HasMoreElements()) {
        DumpNode(GetNextNode());
    }
#endif // _VF_DEBUG
}                               // vf_Graph::DumpGraph
    NS_IMETHOD GetNext(nsISupports **result) 
    {
        NS_ENSURE_ARG_POINTER(result);
        *result = nsnull;

        PRBool hasMore;
        HasMoreElements(&hasMore);
        if (!hasMore)
            return NS_ERROR_FAILURE;
            
        *result = mNext;
        NS_IF_ADDREF(*result);
        mNext = nsnull;
        
        return *result ? NS_OK : NS_ERROR_FAILURE;
    }
NS_IMETHODIMP
ContainerEnumeratorImpl::GetNext(nsISupports** aResult)
{
    nsresult rv;

    bool hasMore;
    rv = HasMoreElements(&hasMore);
    if (NS_FAILED(rv)) return rv;

    if (! hasMore)
        return NS_ERROR_UNEXPECTED;

    NS_ADDREF(*aResult = mResult);
    mResult = nullptr;

    return NS_OK;
}
    NS_IMETHOD GetNext(nsISupports **result) 
    {
        if (NS_WARN_IF(!result))
            return NS_ERROR_INVALID_ARG;
        *result = nullptr;

        bool hasMore;
        HasMoreElements(&hasMore);
        if (!hasMore)
            return NS_ERROR_FAILURE;
            
        *result = mNext;
        NS_IF_ADDREF(*result);
        mNext = nullptr;
        
        return *result ? NS_OK : NS_ERROR_FAILURE;
    }
  NS_IMETHOD GetNext(nsISupports** aResult) override
  {
    if (NS_WARN_IF(!aResult)) {
      return NS_ERROR_INVALID_ARG;
    }
    *aResult = nullptr;

    bool hasMore;
    HasMoreElements(&hasMore);
    if (!hasMore) {
      return NS_ERROR_FAILURE;
    }

    *aResult = mNext;
    NS_IF_ADDREF(*aResult);
    mNext = nullptr;

    return *aResult ? NS_OK : NS_ERROR_FAILURE;
  }
Пример #8
0
/**
 * Dumps graph node in file in DOT format.
 */
void vf_Graph::DumpDotGraph()
{
#if _VF_DEBUG
    /**
     * Graphviz has a hardcoded label length limit. Windows has a file
     * name length limit as well.
     */
    const int MAX_LABEL_LENGTH = 80;

    // get class and method name
    const char *class_name = class_get_name(m_ctx->m_class);

    // create file name
    size_t len = strlen(class_name) + strlen(m_ctx->m_name)
        + strlen(m_ctx->m_descriptor) + 6;
    char *fname = (char *) STD_ALLOCA(len);
    sprintf(fname, "%s_%s%s", class_name, m_ctx->m_name, m_ctx->m_descriptor);

    char *f_start;
    char *pointer;
    if (len > MAX_LABEL_LENGTH) {
        f_start = fname + len - MAX_LABEL_LENGTH;
        // shift to the start of the nearest lexem
        for (pointer = f_start;; pointer++) {
            if (isalnum(*pointer)) {
                continue;
            } else if (!*pointer) {     // end of the string
                break;
            } else {
                // record the first matching position
                f_start = pointer;
                break;
            }
        }
    } else {
        f_start = fname;
    }

    for (pointer = f_start;; pointer++) {
        if (isalnum(*pointer)) {
            continue;
        } else if (!*pointer) { // end of the string
            break;
        } else {
            *pointer = '_';
        }
    }
    // pointer currently points to the end of the string
    sprintf(pointer, ".dot");

    // create .dot file
    ofstream fout(f_start);
    if (fout.fail()) {
        VF_DEBUG("vf_Graph::DumpDotGraph: error opening file: " << f_start);
        return;
    }
    // create name of graph
    sprintf(fname, "%s.%s%s", class_name, m_ctx->m_name, m_ctx->m_descriptor);

    // print graph to file
    DumpDotHeader(f_start, fout);
    ResetNodeIterator();
    while (HasMoreElements()) {
        DumpDotNode(GetNextNode(), fout);
    }
    DumpDotEnd(fout);

    // close file
    fout.flush();
    fout.close();
#endif // _VF_DEBUG
}                               // vf_Graph::DumpDotGraph