ClickHouse

Форк
0
/
bitAnd.cpp 
50 строк · 1.2 Кб
1
#include <Functions/FunctionFactory.h>
2
#include <Functions/FunctionBinaryArithmetic.h>
3

4

5
namespace DB
6
{
7
namespace ErrorCodes
8
{
9
    extern const int LOGICAL_ERROR;
10
}
11

12
namespace
13
{
14

15
template <typename A, typename B>
16
struct BitAndImpl
17
{
18
    using ResultType = typename NumberTraits::ResultOfBit<A, B>::Type;
19
    static constexpr bool allow_fixed_string = true;
20
    static constexpr bool allow_string_integer = false;
21

22
    template <typename Result = ResultType>
23
    static inline Result apply(A a, B b)
24
    {
25
        return static_cast<Result>(a) & static_cast<Result>(b);
26
    }
27

28
#if USE_EMBEDDED_COMPILER
29
    static constexpr bool compilable = true;
30

31
    static inline llvm::Value * compile(llvm::IRBuilder<> & b, llvm::Value * left, llvm::Value * right, bool)
32
    {
33
        if (!left->getType()->isIntegerTy())
34
            throw Exception(ErrorCodes::LOGICAL_ERROR, "BitAndImpl expected an integral type");
35
        return b.CreateAnd(left, right);
36
    }
37
#endif
38
};
39

40
struct NameBitAnd { static constexpr auto name = "bitAnd"; };
41
using FunctionBitAnd = BinaryArithmeticOverloadResolver<BitAndImpl, NameBitAnd, true, false>;
42

43
}
44

45
REGISTER_FUNCTION(BitAnd)
46
{
47
    factory.registerFunction<FunctionBitAnd>();
48
}
49

50
}
51

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.