MCPcopy Create free account
hub / github.com/apache/cloudberry / array_bitmap_copy

Function array_bitmap_copy

src/backend/utils/adt/arrayfuncs.c:4855–4919  ·  view source on GitHub ↗

* Copy nitems null-bitmap bits from source to destination * * destbitmap: start of destination array's null bitmap (mustn't be NULL) * destoffset: 0-based linear element number of first dest element * srcbitmap: start of source array's null bitmap, or NULL if none * srcoffset: 0-based linear element number of first source element * nitems: number of bits to copy (>= 0) * * If srcbitmap is

Source from the content-addressed store, hash-verified

4853 * to make it worth worrying too much. For the moment, KISS.
4854 */
4855void
4856array_bitmap_copy(bits8 *destbitmap, int destoffset,
4857 const bits8 *srcbitmap, int srcoffset,
4858 int nitems)
4859{
4860 int destbitmask,
4861 destbitval,
4862 srcbitmask,
4863 srcbitval;
4864
4865 Assert(destbitmap);
4866 if (nitems <= 0)
4867 return; /* don't risk fetch off end of memory */
4868 destbitmap += destoffset / 8;
4869 destbitmask = 1 << (destoffset % 8);
4870 destbitval = *destbitmap;
4871 if (srcbitmap)
4872 {
4873 srcbitmap += srcoffset / 8;
4874 srcbitmask = 1 << (srcoffset % 8);
4875 srcbitval = *srcbitmap;
4876 while (nitems-- > 0)
4877 {
4878 if (srcbitval & srcbitmask)
4879 destbitval |= destbitmask;
4880 else
4881 destbitval &= ~destbitmask;
4882 destbitmask <<= 1;
4883 if (destbitmask == 0x100 /* (1<<8) */)
4884 {
4885 *destbitmap++ = destbitval;
4886 destbitmask = 1;
4887 if (nitems > 0)
4888 destbitval = *destbitmap;
4889 }
4890 srcbitmask <<= 1;
4891 if (srcbitmask == 0x100 /* (1<<8) */)
4892 {
4893 srcbitmap++;
4894 srcbitmask = 1;
4895 if (nitems > 0)
4896 srcbitval = *srcbitmap;
4897 }
4898 }
4899 if (destbitmask != 1)
4900 *destbitmap = destbitval;
4901 }
4902 else
4903 {
4904 while (nitems-- > 0)
4905 {
4906 destbitval |= destbitmask;
4907 destbitmask <<= 1;
4908 if (destbitmask == 0x100 /* (1<<8) */)
4909 {
4910 *destbitmap++ = destbitval;
4911 destbitmask = 1;
4912 if (nitems > 0)

Callers 9

array_set_elementFunction · 0.85
array_set_sliceFunction · 0.85
array_extract_sliceFunction · 0.85
array_insert_sliceFunction · 0.85
accumArrayResultArrFunction · 0.85
makeArrayResultArrFunction · 0.85
array_catFunction · 0.85
array_agg_array_combineFunction · 0.85
ExecEvalArrayExprFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected