Logo ROOT  
Reference Guide
RColumnElement.cxx
Go to the documentation of this file.
1/// \file RColumnElement.cxx
2/// \ingroup NTuple ROOT7
3/// \author Jakob Blomer <jblomer@cern.ch>
4/// \date 2019-08-11
5/// \warning This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback
6/// is welcome!
7
8/*************************************************************************
9 * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. *
10 * All rights reserved. *
11 * *
12 * For the licensing terms see $ROOTSYS/LICENSE. *
13 * For the list of contributors see $ROOTSYS/README/CREDITS. *
14 *************************************************************************/
15
17
18#include <TError.h>
19
20#include <algorithm>
21#include <bitset>
22#include <cstdint>
23
26 switch (type) {
43 default:
44 R__ASSERT(false);
45 }
46 // never here
47 return RColumnElementBase();
48}
49
51 void *dst, void *src, std::size_t count) const
52{
53 bool *boolArray = reinterpret_cast<bool *>(src);
54 char *charArray = reinterpret_cast<char *>(dst);
55 std::bitset<8> bitSet;
56 std::size_t i = 0;
57 for (; i < count; ++i) {
58 bitSet.set(i % 8, boolArray[i]);
59 if (i % 8 == 7) {
60 char packed = bitSet.to_ulong();
61 charArray[i / 8] = packed;
62 }
63 }
64 if (i % 8 != 0) {
65 char packed = bitSet.to_ulong();
66 charArray[i / 8] = packed;
67 }
68}
69
71 void *dst, void *src, std::size_t count) const
72{
73 bool *boolArray = reinterpret_cast<bool *>(dst);
74 char *charArray = reinterpret_cast<char *>(src);
75 std::bitset<8> bitSet;
76 for (std::size_t i = 0; i < count; i += 8) {
77 bitSet = charArray[i / 8];
78 for (std::size_t j = i; j < std::min(count, i + 8); ++j) {
79 boolArray[j] = bitSet[j % 8];
80 }
81 }
82}
#define R__ASSERT(e)
Definition: TError.h:96
int type
Definition: TGX11.cxx:120
virtual void Pack(void *destination, void *source, std::size_t count) const
If the on-storage layout and the in-memory layout differ, packing creates an on-disk page from an in-...
virtual void Unpack(void *destination, void *source, std::size_t count) const
If the on-storage layout and the in-memory layout differ, unpacking creates a memory page from an on-...
static RColumnElementBase Generate(EColumnType type)
Pairs of C++ type and column type, like float and EColumnType::kReal32.