X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2FDiscriminatedPtr.h;h=0d485f50580686477811a5c9dedb7ba03b3b0ec9;hb=4c7a736d6529f22451a0ec965e093e7e318695e3;hp=1332701d3560e53fca8b5fc4b3285f3441196c21;hpb=27494a20393fa45072e7d526d358835f3abe312a;p=folly.git diff --git a/folly/DiscriminatedPtr.h b/folly/DiscriminatedPtr.h index 1332701d..0d485f50 100644 --- a/folly/DiscriminatedPtr.h +++ b/folly/DiscriminatedPtr.h @@ -1,5 +1,5 @@ /* - * Copyright 2012 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,17 +24,17 @@ * @author Tudor Bosman (tudorb@fb.com) */ -#ifndef FOLLY_DISCRIMINATEDPTR_H_ -#define FOLLY_DISCRIMINATEDPTR_H_ +#pragma once #include #include #include -#include "folly/Likely.h" -#include "folly/detail/DiscriminatedPtrDetail.h" +#include +#include +#include -#ifndef __x86_64__ -# error "DiscriminatedPtr is x64-specific code." +#if !FOLLY_X64 && !FOLLY_A64 && !FOLLY_PPC64 +# error "DiscriminatedPtr is x64, arm64 and ppc64 specific code." #endif namespace folly { @@ -190,8 +190,8 @@ class DiscriminatedPtr { * Get the 1-based type index of T in Types. */ template - size_t typeIndex() const { - return dptr_detail::GetTypeIndex::value; + uint16_t typeIndex() const { + return uint16_t(dptr_detail::GetTypeIndex::value); } uint16_t index() const { return data_ >> 48; } @@ -215,7 +215,25 @@ class DiscriminatedPtr { uintptr_t data_; }; -} // namespace folly - -#endif /* FOLLY_DISCRIMINATEDPTR_H_ */ +template +decltype(auto) apply_visitor( + Visitor&& visitor, + const DiscriminatedPtr& variant) { + return variant.apply(std::forward(visitor)); +} + +template +decltype(auto) apply_visitor( + Visitor&& visitor, + DiscriminatedPtr& variant) { + return variant.apply(std::forward(visitor)); +} + +template +decltype(auto) apply_visitor( + Visitor&& visitor, + DiscriminatedPtr&& variant) { + return variant.apply(std::forward(visitor)); +} +} // namespace folly