VTK  9.1.0
vtkXMLDataHeaderPrivate.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkXMLDataHeaderPrivate.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
15
16#ifndef vtkXMLDataHeaderPrivate_DoNotInclude
17#error "do not include unless you know what you are doing"
18#endif
19
20#ifndef vtkXMLDataHeaderPrivate_h
21#define vtkXMLDataHeaderPrivate_h
22
23#include "vtkType.h"
24#include <vector>
25
26// Abstract interface using type vtkTypeUInt64 to access an array
27// of either vtkTypeUInt32 or vtkTypeUInt64. Shared by vtkXMLWriter
28// and vtkXMLDataParser to write/read binary data headers.
30{
31public:
32 virtual void Resize(size_t count) = 0;
33 virtual vtkTypeUInt64 Get(size_t index) const = 0;
34 virtual bool Set(size_t index, vtkTypeUInt64 value) = 0;
35 virtual size_t WordSize() const = 0;
36 virtual size_t WordCount() const = 0;
37 virtual unsigned char* Data() = 0;
38 size_t DataSize() const { return this->WordCount() * this->WordSize(); }
39 virtual ~vtkXMLDataHeader() = default;
40 static inline vtkXMLDataHeader* New(int width, size_t count);
41};
42
43template <typename T>
45{
46 std::vector<T> Header;
47
48public:
50 : Header(n, 0)
51 {
52 }
53 void Resize(size_t count) override { this->Header.resize(count, 0); }
54 vtkTypeUInt64 Get(size_t index) const override { return this->Header[index]; }
55 bool Set(size_t index, vtkTypeUInt64 value) override
56 {
57 this->Header[index] = T(value);
58 return vtkTypeUInt64(this->Header[index]) == value;
59 }
60 size_t WordSize() const override { return sizeof(T); }
61 size_t WordCount() const override { return this->Header.size(); }
62 unsigned char* Data() override { return reinterpret_cast<unsigned char*>(&this->Header[0]); }
63};
64
65vtkXMLDataHeader* vtkXMLDataHeader::New(int width, size_t count)
66{
67 switch (width)
68 {
69 case 32:
71 case 64:
73 }
74 return nullptr;
75}
76
77#endif
78// VTK-HeaderTest-Exclude: vtkXMLDataHeaderPrivate.h
bool Set(size_t index, vtkTypeUInt64 value) override
size_t WordCount() const override
vtkTypeUInt64 Get(size_t index) const override
unsigned char * Data() override
void Resize(size_t count) override
size_t WordSize() const override
virtual vtkTypeUInt64 Get(size_t index) const =0
static vtkXMLDataHeader * New(int width, size_t count)
virtual size_t WordCount() const =0
virtual bool Set(size_t index, vtkTypeUInt64 value)=0
virtual unsigned char * Data()=0
virtual size_t WordSize() const =0
virtual void Resize(size_t count)=0
virtual ~vtkXMLDataHeader()=default