当前位置: 首页>>代码示例>>C++>>正文


C++ BlobSet::AppendBlobImpls方法代码示例

本文整理汇总了C++中BlobSet::AppendBlobImpls方法的典型用法代码示例。如果您正苦于以下问题:C++ BlobSet::AppendBlobImpls方法的具体用法?C++ BlobSet::AppendBlobImpls怎么用?C++ BlobSet::AppendBlobImpls使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在BlobSet的用法示例。


在下文中一共展示了BlobSet::AppendBlobImpls方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: obj

nsresult
DOMMultipartFileImpl::ParseBlobArrayArgument(JSContext* aCx, JS::Value& aValue,
                                             bool aNativeEOL,
                                             UnwrapFuncPtr aUnwrapFunc)
{
  if (!aValue.isObject()) {
    return NS_ERROR_TYPE_ERR; // We're not interested
  }

  JS::Rooted<JSObject*> obj(aCx, &aValue.toObject());
  if (!JS_IsArrayObject(aCx, obj)) {
    return NS_ERROR_TYPE_ERR; // We're not interested
  }

  BlobSet blobSet;

  uint32_t length;
  MOZ_ALWAYS_TRUE(JS_GetArrayLength(aCx, obj, &length));
  for (uint32_t i = 0; i < length; ++i) {
    JS::Rooted<JS::Value> element(aCx);
    if (!JS_GetElement(aCx, obj, i, &element))
      return NS_ERROR_TYPE_ERR;

    if (element.isObject()) {
      JS::Rooted<JSObject*> obj(aCx, &element.toObject());
      nsCOMPtr<nsIDOMBlob> blob = aUnwrapFunc(aCx, obj);
      if (blob) {
        nsRefPtr<DOMFileImpl> blobImpl =
          static_cast<DOMFile*>(blob.get())->Impl();

        // Flatten so that multipart blobs will never nest
        const nsTArray<nsRefPtr<DOMFileImpl>>* subBlobImpls =
          blobImpl->GetSubBlobImpls();
        if (subBlobImpls) {
          blobSet.AppendBlobImpls(*subBlobImpls);
        } else {
          blobSet.AppendBlobImpl(blobImpl);
        }
        continue;
      }
      if (JS_IsArrayBufferViewObject(obj)) {
        nsresult rv = blobSet.AppendVoidPtr(
                                          JS_GetArrayBufferViewData(obj),
                                          JS_GetArrayBufferViewByteLength(obj));
        NS_ENSURE_SUCCESS(rv, rv);
        continue;
      }
      if (JS_IsArrayBufferObject(obj)) {
        nsresult rv = blobSet.AppendArrayBuffer(obj);
        NS_ENSURE_SUCCESS(rv, rv);
        continue;
      }
    }

    // coerce it to a string
    JSString* str = JS::ToString(aCx, element);
    NS_ENSURE_TRUE(str, NS_ERROR_TYPE_ERR);

    nsresult rv = blobSet.AppendString(str, aNativeEOL, aCx);
    NS_ENSURE_SUCCESS(rv, rv);
  }

  mBlobImpls = blobSet.GetBlobImpls();

  SetLengthAndModifiedDate();

  return NS_OK;
}
开发者ID:CodeSpeaker,项目名称:gecko-dev,代码行数:68,代码来源:nsDOMBlobBuilder.cpp


注:本文中的BlobSet::AppendBlobImpls方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。