Skip to content

Commit 814074f

Browse files
committed
make all bit operations internal
1 parent 00c6256 commit 814074f

File tree

3 files changed

+211
-243
lines changed

3 files changed

+211
-243
lines changed

Firestore/Swift/Source/ExpressionImplementation.swift

Lines changed: 209 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,215 @@ extension Expression {
1616
func toBridge() -> ExprBridge {
1717
return (self as! BridgeWrapper).bridge
1818
}
19+
20+
/// Creates an expression applying bitwise AND between this expression and an integer literal.
21+
/// Assumes `self` evaluates to an Integer or Bytes.
22+
///
23+
/// - Note: This API is in beta.
24+
///
25+
/// ```swift
26+
/// // Bitwise AND of "flags" field and 0xFF
27+
/// Field("flags").bitAnd(0xFF)
28+
/// ```
29+
///
30+
/// - Parameter otherBits: The integer literal operand.
31+
/// - Returns: A new "FunctionExpression" representing the bitwise AND operation.
32+
func bitAnd(_ otherBits: Int) -> FunctionExpression {
33+
return FunctionExpression("bit_and", [self, Helper.sendableToExpr(otherBits)])
34+
}
35+
36+
/// Creates an expression applying bitwise AND between this expression and a UInt8 literal (often
37+
/// for byte masks).
38+
/// Assumes `self` evaluates to an Integer or Bytes.
39+
/// - Note: This API is in beta.
40+
/// ```swift
41+
/// // Bitwise AND of "byteFlags" field and a byte mask
42+
/// Field("byteFlags").bitAnd(0b00001111 as UInt8)
43+
/// ```
44+
/// - Parameter otherBits: The UInt8 literal operand.
45+
/// - Returns: A new "FunctionExpression" representing the bitwise AND operation.
46+
func bitAnd(_ otherBits: UInt8) -> FunctionExpression {
47+
return FunctionExpression("bit_and", [self, Helper.sendableToExpr(otherBits)])
48+
}
49+
50+
/// Creates an expression applying bitwise AND between this expression and another expression.
51+
/// Assumes `self` and `bitsExpression` evaluate to Integer or Bytes.
52+
/// - Note: This API is in beta.
53+
///
54+
/// ```swift
55+
/// // Bitwise AND of "mask1" and "mask2" fields
56+
/// Field("mask1").bitAnd(Field("mask2"))
57+
/// ```
58+
/// - Parameter bitsExpression: The other `Expr` operand.
59+
/// - Returns: A new "FunctionExpression" representing the bitwise AND operation.
60+
func bitAnd(_ bitsExpression: Expression) -> FunctionExpression {
61+
return FunctionExpression("bit_and", [self, bitsExpression])
62+
}
63+
64+
/// Creates an expression applying bitwise OR between this expression and an integer literal.
65+
/// Assumes `self` evaluates to an Integer or Bytes.
66+
///
67+
/// - Note: This API is in beta.
68+
///
69+
/// ```swift
70+
/// // Bitwise OR of "flags" field and 0x01
71+
/// Field("flags").bitOr(0x01)
72+
/// ```
73+
///
74+
/// - Parameter otherBits: The integer literal operand.
75+
/// - Returns: A new "FunctionExpression" representing the bitwise OR operation.
76+
func bitOr(_ otherBits: Int) -> FunctionExpression {
77+
return FunctionExpression("bit_or", [self, Helper.sendableToExpr(otherBits)])
78+
}
79+
80+
/// Creates an expression applying bitwise OR between this expression and a UInt8 literal.
81+
/// Assumes `self` evaluates to an Integer or Bytes.
82+
/// - Note: This API is in beta.
83+
/// ```swift
84+
/// // Set specific bits in "controlByte"
85+
/// Field("controlByte").bitOr(0b10000001 as UInt8)
86+
/// ```
87+
/// - Parameter otherBits: The UInt8 literal operand.
88+
/// - Returns: A new "FunctionExpression" representing the bitwise OR operation.
89+
func bitOr(_ otherBits: UInt8) -> FunctionExpression {
90+
return FunctionExpression("bit_or", [self, Helper.sendableToExpr(otherBits)])
91+
}
92+
93+
/// Creates an expression applying bitwise OR between this expression and another expression.
94+
/// Assumes `self` and `bitsExpression` evaluate to Integer or Bytes.
95+
/// - Note: This API is in beta.
96+
///
97+
/// ```swift
98+
/// // Bitwise OR of "permissionSet1" and "permissionSet2" fields
99+
/// Field("permissionSet1").bitOr(Field("permissionSet2"))
100+
/// ```
101+
/// - Parameter bitsExpression: The other `Expr` operand.
102+
/// - Returns: A new "FunctionExpression" representing the bitwise OR operation.
103+
func bitOr(_ bitsExpression: Expression) -> FunctionExpression {
104+
return FunctionExpression("bit_or", [self, bitsExpression])
105+
}
106+
107+
/// Creates an expression applying bitwise XOR between this expression and an integer literal.
108+
/// Assumes `self` evaluates to an Integer or Bytes.
109+
///
110+
/// - Note: This API is in beta.
111+
///
112+
/// ```swift
113+
/// // Bitwise XOR of "toggle" field and 0xFFFF
114+
/// Field("toggle").bitXor(0xFFFF)
115+
/// ```
116+
///
117+
/// - Parameter otherBits: The integer literal operand.
118+
/// - Returns: A new "FunctionExpression" representing the bitwise XOR operation.
119+
func bitXor(_ otherBits: Int) -> FunctionExpression {
120+
return FunctionExpression("bit_xor", [self, Helper.sendableToExpr(otherBits)])
121+
}
122+
123+
/// Creates an expression applying bitwise XOR between this expression and a UInt8 literal.
124+
/// Assumes `self` evaluates to an Integer or Bytes.
125+
/// - Note: This API is in beta.
126+
/// ```swift
127+
/// // Toggle bits in "statusByte" using a XOR mask
128+
/// Field("statusByte").bitXor(0b01010101 as UInt8)
129+
/// ```
130+
/// - Parameter otherBits: The UInt8 literal operand.
131+
/// - Returns: A new "FunctionExpression" representing the bitwise XOR operation.
132+
func bitXor(_ otherBits: UInt8) -> FunctionExpression {
133+
return FunctionExpression("bit_xor", [self, Helper.sendableToExpr(otherBits)])
134+
}
135+
136+
/// Creates an expression applying bitwise XOR between this expression and another expression.
137+
/// Assumes `self` and `bitsExpression` evaluate to Integer or Bytes.
138+
/// - Note: This API is in beta.
139+
///
140+
/// ```swift
141+
/// // Bitwise XOR of "key1" and "key2" fields (assuming Bytes)
142+
/// Field("key1").bitXor(Field("key2"))
143+
/// ```
144+
/// - Parameter bitsExpression: The other `Expr` operand.
145+
/// - Returns: A new "FunctionExpression" representing the bitwise XOR operation.
146+
func bitXor(_ bitsExpression: Expression) -> FunctionExpression {
147+
return FunctionExpression("bit_xor", [self, bitsExpression])
148+
}
149+
150+
/// Creates an expression applying bitwise NOT to this expression.
151+
/// Assumes `self` evaluates to an Integer or Bytes.
152+
///
153+
/// - Note: This API is in beta.
154+
///
155+
/// ```swift
156+
/// // Bitwise NOT of "mask" field
157+
/// Field("mask").bitNot()
158+
/// ```
159+
///
160+
/// - Returns: A new "FunctionExpression" representing the bitwise NOT operation.
161+
func bitNot() -> FunctionExpression {
162+
return FunctionExpression("bit_not", [self])
163+
}
164+
165+
/// Creates an expression applying bitwise left shift to this expression by a literal number of
166+
/// bits.
167+
/// Assumes `self` evaluates to Integer or Bytes.
168+
///
169+
/// - Note: This API is in beta.
170+
///
171+
/// ```swift
172+
/// // Left shift "value" field by 2 bits
173+
/// Field("value").bitLeftShift(2)
174+
/// ```
175+
///
176+
/// - Parameter y: The number of bits (Int literal) to shift by.
177+
/// - Returns: A new "FunctionExpression" representing the bitwise left shift operation.
178+
func bitLeftShift(_ y: Int) -> FunctionExpression {
179+
return FunctionExpression("bit_left_shift", [self, Helper.sendableToExpr(y)])
180+
}
181+
182+
/// Creates an expression applying bitwise left shift to this expression by a number of bits
183+
/// specified by an expression.
184+
/// Assumes `self` evaluates to Integer or Bytes, and `numberExpr` evaluates to an Integer.
185+
/// - Note: This API is in beta.
186+
///
187+
/// ```swift
188+
/// // Left shift "data" by number of bits in "shiftCount" field
189+
/// Field("data").bitLeftShift(Field("shiftCount"))
190+
/// ```
191+
/// - Parameter numberExpr: An `Expr` (evaluating to an Int) for the number of bits to shift by.
192+
/// - Returns: A new "FunctionExpression" representing the bitwise left shift operation.
193+
func bitLeftShift(_ numberExpression: Expression) -> FunctionExpression {
194+
return FunctionExpression("bit_left_shift", [self, numberExpression])
195+
}
196+
197+
/// Creates an expression applying bitwise right shift to this expression by a literal number of
198+
/// bits.
199+
/// Assumes `self` evaluates to Integer or Bytes.
200+
///
201+
/// - Note: This API is in beta.
202+
///
203+
/// ```swift
204+
/// // Right shift "value" field by 4 bits
205+
/// Field("value").bitRightShift(4)
206+
/// ```
207+
///
208+
/// - Parameter y: The number of bits (Int literal) to shift by.
209+
/// - Returns: A new "FunctionExpression" representing the bitwise right shift operation.
210+
func bitRightShift(_ y: Int) -> FunctionExpression {
211+
return FunctionExpression("bit_right_shift", [self, Helper.sendableToExpr(y)])
212+
}
213+
214+
/// Creates an expression applying bitwise right shift to this expression by a number of bits
215+
/// specified by an expression.
216+
/// Assumes `self` evaluates to Integer or Bytes, and `numberExpr` evaluates to an Integer.
217+
/// - Note: This API is in beta.
218+
///
219+
/// ```swift
220+
/// // Right shift "data" by number of bits in "shiftCount" field
221+
/// Field("data").bitRightShift(Field("shiftCount"))
222+
/// ```
223+
/// - Parameter numberExpr: An `Expr` (evaluating to an Int) for the number of bits to shift by.
224+
/// - Returns: A new "FunctionExpression" representing the bitwise right shift operation.
225+
func bitRightShift(_ numberExpression: Expression) -> FunctionExpression {
226+
return FunctionExpression("bit_right_shift", [self, numberExpression])
227+
}
19228
}
20229

21230
public extension Expression {
@@ -533,64 +742,6 @@ public extension Expression {
533742
)
534743
}
535744

536-
// MARK: - Bitwise operations
537-
538-
func bitAnd(_ otherBits: Int) -> FunctionExpression {
539-
return FunctionExpression("bit_and", [self, Helper.sendableToExpr(otherBits)])
540-
}
541-
542-
func bitAnd(_ otherBits: UInt8) -> FunctionExpression {
543-
return FunctionExpression("bit_and", [self, Helper.sendableToExpr(otherBits)])
544-
}
545-
546-
func bitAnd(_ bitsExpression: Expression) -> FunctionExpression {
547-
return FunctionExpression("bit_and", [self, bitsExpression])
548-
}
549-
550-
func bitOr(_ otherBits: Int) -> FunctionExpression {
551-
return FunctionExpression("bit_or", [self, Helper.sendableToExpr(otherBits)])
552-
}
553-
554-
func bitOr(_ otherBits: UInt8) -> FunctionExpression {
555-
return FunctionExpression("bit_or", [self, Helper.sendableToExpr(otherBits)])
556-
}
557-
558-
func bitOr(_ bitsExpression: Expression) -> FunctionExpression {
559-
return FunctionExpression("bit_or", [self, bitsExpression])
560-
}
561-
562-
func bitXor(_ otherBits: Int) -> FunctionExpression {
563-
return FunctionExpression("bit_xor", [self, Helper.sendableToExpr(otherBits)])
564-
}
565-
566-
func bitXor(_ otherBits: UInt8) -> FunctionExpression {
567-
return FunctionExpression("bit_xor", [self, Helper.sendableToExpr(otherBits)])
568-
}
569-
570-
func bitXor(_ bitsExpression: Expression) -> FunctionExpression {
571-
return FunctionExpression("bit_xor", [self, bitsExpression])
572-
}
573-
574-
func bitNot() -> FunctionExpression {
575-
return FunctionExpression("bit_not", [self])
576-
}
577-
578-
func bitLeftShift(_ y: Int) -> FunctionExpression {
579-
return FunctionExpression("bit_left_shift", [self, Helper.sendableToExpr(y)])
580-
}
581-
582-
func bitLeftShift(_ numberExpression: Expression) -> FunctionExpression {
583-
return FunctionExpression("bit_left_shift", [self, numberExpression])
584-
}
585-
586-
func bitRightShift(_ y: Int) -> FunctionExpression {
587-
return FunctionExpression("bit_right_shift", [self, Helper.sendableToExpr(y)])
588-
}
589-
590-
func bitRightShift(_ numberExpression: Expression) -> FunctionExpression {
591-
return FunctionExpression("bit_right_shift", [self, numberExpression])
592-
}
593-
594745
func documentId() -> FunctionExpression {
595746
return FunctionExpression("document_id", [self])
596747
}

0 commit comments

Comments
 (0)