00001 /* 00002 // $Id: //open/dev/fennel/tuple/UnalignedAttributeAccessor.h#6 $ 00003 // Fennel is a library of data storage and processing components. 00004 // Copyright (C) 2006-2009 The Eigenbase Project 00005 // Copyright (C) 2006-2009 SQLstream, Inc. 00006 // Copyright (C) 2006-2009 LucidEra, Inc. 00007 // 00008 // This program is free software; you can redistribute it and/or modify it 00009 // under the terms of the GNU General Public License as published by the Free 00010 // Software Foundation; either version 2 of the License, or (at your option) 00011 // any later version approved by The Eigenbase Project. 00012 // 00013 // This program is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 // GNU General Public License for more details. 00017 // 00018 // You should have received a copy of the GNU General Public License 00019 // along with this program; if not, write to the Free Software 00020 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00021 */ 00022 00023 #ifndef Fennel_UnalignedAttributeAccessor_Included 00024 #define Fennel_UnalignedAttributeAccessor_Included 00025 00026 FENNEL_BEGIN_NAMESPACE 00027 00028 class TupleDatum; 00029 class TupleAttributeDescriptor; 00030 00081 class FENNEL_TUPLE_EXPORT UnalignedAttributeAccessor 00082 { 00083 static const TupleStorageByteLength ONE_BYTE_MAX_LENGTH = 127; 00084 static const TupleStorageByteLength TWO_BYTE_MAX_LENGTH = 32767; 00085 static const uint8_t ONE_BYTE_LENGTH_MASK = 0x7f; 00086 static const uint16_t TWO_BYTE_LENGTH_MASK1 = 0x7f00; 00087 static const uint16_t TWO_BYTE_LENGTH_MASK2 = 0x00ff; 00088 static const uint8_t TWO_BYTE_LENGTH_BIT = 0x80; 00089 00090 uint cbStorage; 00091 00092 bool omitLengthIndicator; 00093 00094 bool isCompressedInt64; 00095 00105 inline void compressInt64( 00106 TupleDatum const &datum, 00107 PBuffer pDest) const; 00108 00116 inline void uncompressInt64( 00117 TupleDatum &datum, 00118 PConstBuffer pDataWithLen) const; 00119 00120 bool isInitialized() const; 00121 00122 public: 00123 explicit UnalignedAttributeAccessor(); 00124 00131 explicit UnalignedAttributeAccessor( 00132 TupleAttributeDescriptor const &attrDescriptor); 00133 00142 void compute( 00143 TupleAttributeDescriptor const &attrDescriptor); 00144 00156 void storeValue( 00157 TupleDatum const &datum, 00158 PBuffer pDataWithLen) const; 00159 00170 void loadValue( 00171 TupleDatum &datum, 00172 PConstBuffer pDataWithLen) const; 00173 00182 TupleStorageByteLength getStoredByteCount( 00183 PConstBuffer pDataWithLen) const; 00184 00191 TupleStorageByteLength getMaxByteCount() const; 00192 }; 00193 00194 FENNEL_END_NAMESPACE 00195 00196 #endif 00197 00198 // End UnalignedAttributeAccessor.h