00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #pragma once
00022
00023 #include <drizzled/function/bit.h>
00024
00025 namespace drizzled
00026 {
00027
00028 namespace function
00029 {
00030
00031 namespace bit
00032 {
00033
00034 class Or :public Bit
00035 {
00036 public:
00037 Or(Item *a, Item *b) :Bit(a, b) {}
00038 int64_t val_int();
00039 const char *func_name() const { return "|"; }
00040 };
00041
00042 class And :public Bit
00043 {
00044 public:
00045 And(Item *a, Item *b) :Bit(a, b) {}
00046 int64_t val_int();
00047 const char *func_name() const { return "&"; }
00048 };
00049
00050 class ShiftLeft :public Bit
00051 {
00052 public:
00053 ShiftLeft(Item *a, Item *b) :Bit(a, b) {}
00054 int64_t val_int();
00055 const char *func_name() const { return "<<"; }
00056 };
00057
00058 class ShiftRight :public Bit
00059 {
00060 public:
00061 ShiftRight(Item *a, Item *b) :Bit(a, b) {}
00062 int64_t val_int();
00063 const char *func_name() const { return ">>"; }
00064 };
00065
00066 class Neg :public Bit
00067 {
00068 public:
00069 Neg(Item *a) :Bit(a) {}
00070 int64_t val_int();
00071 const char *func_name() const { return "~"; }
00072
00073 virtual inline void print(String *str)
00074 {
00075 Item_func::print(str);
00076 }
00077 };
00078
00079 class Xor : public Bit
00080 {
00081 public:
00082 Xor(Item *a, Item *b) :Bit(a, b) {}
00083 int64_t val_int();
00084 const char *func_name() const { return "^"; }
00085 };
00086
00087
00088 }
00089 }
00090 }
00091
00092