mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / storage / ndb / src / kernel / vm / LongSignal.hpp
bloba8417be82150efb0b744772e0cbec7edef4acc4e
1 /* Copyright (c) 2003-2005 MySQL AB
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; version 2 of the License.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 GNU General Public License for more details.
12 You should have received a copy of the GNU General Public License
13 along with this program; if not, write to the Free Software
14 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
16 #ifndef LONG_SIGNAL_HPP
17 #define LONG_SIGNAL_HPP
19 #include "pc.hpp"
20 #include <ArrayPool.hpp>
22 /**
23 * Section handling
25 struct SectionSegment {
27 STATIC_CONST( DataLength = NDB_SECTION_SEGMENT_SZ );
29 Uint32 m_ownerRef;
30 Uint32 m_sz;
31 Uint32 m_lastSegment;
32 union {
33 Uint32 m_nextSegment;
34 Uint32 nextPool;
36 Uint32 theData[DataLength];
39 /**
40 * Pool for SectionSegments
42 class SectionSegmentPool : public ArrayPool<SectionSegment> {};
44 /**
45 * And the instance
47 extern SectionSegmentPool g_sectionSegmentPool;
49 /**
50 * Function prototypes
52 void print(SegmentedSectionPtr ptr, FILE* out);
53 void copy(SegmentedSectionPtr dst, Uint32 * src, Uint32 len);
54 void copy(Uint32 * dst, SegmentedSectionPtr src);
55 bool import(Ptr<SectionSegment> & first, const Uint32 * src, Uint32 len);
57 extern class SectionSegmentPool g_sectionSegmentPool;
58 void getSection(SegmentedSectionPtr & ptr, Uint32 id);
59 void linkSegments(Uint32 head, Uint32 tail);
61 void getSections(Uint32 secCount, SegmentedSectionPtr ptr[3]);
62 void releaseSections(Uint32 secCount, SegmentedSectionPtr ptr[3]);
65 #include "DataBuffer.hpp"
67 template<Uint32 sz>
68 void
69 append(DataBuffer<sz>& dst, SegmentedSectionPtr ptr, SectionSegmentPool& pool){
70 Uint32 len = ptr.sz;
71 while(len > SectionSegment::DataLength){
72 dst.append(ptr.p->theData, SectionSegment::DataLength);
73 ptr.p = pool.getPtr(ptr.p->m_nextSegment);
74 len -= SectionSegment::DataLength;
76 dst.append(ptr.p->theData, len);
79 #endif