1 #include "bsta_io_histogram.h"
2 //
3 //============== histogram ==========================
4 //
vsl_b_write(vsl_b_ostream & os,const bsta_histogram_base * hptr)5 void vsl_b_write(vsl_b_ostream& os, const bsta_histogram_base* hptr)
6 {
7 if (hptr == nullptr)
8 vsl_b_write(os, false);
9 else {
10 vsl_b_write(os, true);
11 if (hptr->type_ == bsta_histogram_base::HIST_TYPE_FLOAT) {
12 const auto* hf =
13 static_cast<const bsta_histogram<float>*>(hptr);
14 vsl_b_write(os, *hf);
15 }
16 else if (hptr->type_ == bsta_histogram_base::HIST_TYPE_DOUBLE) {
17 const auto* hf =
18 static_cast<const bsta_histogram<double>*>(hptr);
19 vsl_b_write(os, *hf);
20 }
21 }
22 }
23
vsl_b_read(vsl_b_istream & is,bsta_histogram_base * & hptr)24 void vsl_b_read(vsl_b_istream &is, bsta_histogram_base*& hptr)
25 {
26 delete hptr; hptr = nullptr;
27 bool not_null_ptr;
28 vsl_b_read(is, not_null_ptr);
29 if (not_null_ptr)
30 {
31 short ver;
32 vsl_b_read(is, ver);
33 if (ver != 1)
34 return;
35 int itype = 0;
36 vsl_b_read(is, itype);
37 auto type =
38 static_cast<bsta_histogram_base::bsta_hist_type>(itype);
39 if (type == bsta_histogram_base::HIST_TYPE_FLOAT)
40 {
41 bsta_histogram<float> h;
42 vsl_b_read(is, h, true);
43 hptr = new bsta_histogram<float>(h);
44 }
45 else if (type == bsta_histogram_base::HIST_TYPE_DOUBLE)
46 {
47 bsta_histogram<double> h;
48 vsl_b_read(is, h, true);
49 hptr = new bsta_histogram<double>(h);
50 }
51 // else if (type == bsta_histogram_base::HIST_TYPE_UNKNOWN) ; // do nothing
52 }
53 }
54
vsl_b_write(vsl_b_ostream & os,const bsta_histogram_base_sptr & hptr)55 void vsl_b_write(vsl_b_ostream& os, const bsta_histogram_base_sptr& hptr)
56 {
57 vsl_b_write(os, hptr.ptr());
58 }
59
vsl_b_read(vsl_b_istream & is,bsta_histogram_base_sptr & hptr)60 void vsl_b_read(vsl_b_istream &is, bsta_histogram_base_sptr& hptr)
61 {
62 bsta_histogram_base* ptr = nullptr;
63 vsl_b_read(is, ptr);
64 hptr = ptr;
65 }
66
67 //
68 //============== joint_histogram ==========================
69 //
70
vsl_b_write(vsl_b_ostream & os,const bsta_joint_histogram_base * hptr)71 void vsl_b_write(vsl_b_ostream &os, const bsta_joint_histogram_base* hptr)
72 {
73 if (hptr == nullptr)
74 vsl_b_write(os, false);
75 else {
76 vsl_b_write(os, true);
77 if (hptr->type_ == bsta_joint_histogram_base::HIST_TYPE_FLOAT) {
78 const auto* hf =
79 static_cast<const bsta_joint_histogram<float>*>(hptr);
80 vsl_b_write(os, *hf);
81 }
82 else if (hptr->type_ == bsta_joint_histogram_base::HIST_TYPE_DOUBLE) {
83 const auto* hf =
84 static_cast<const bsta_joint_histogram<double>*>(hptr);
85 vsl_b_write(os, *hf);
86 }
87 }
88 }
89
vsl_b_read(vsl_b_istream & is,bsta_joint_histogram_base * & hptr)90 void vsl_b_read(vsl_b_istream &is, bsta_joint_histogram_base*& hptr)
91 {
92 delete hptr; hptr = nullptr;
93 bool not_null_ptr;
94 vsl_b_read(is, not_null_ptr);
95 if (not_null_ptr)
96 {
97 short ver;
98 vsl_b_read(is, ver);
99 if (ver != 1)
100 return;
101 int itype = 0;
102 vsl_b_read(is, itype);
103 auto type =
104 static_cast<bsta_joint_histogram_base::bsta_joint_hist_type>(itype);
105 if (type == bsta_joint_histogram_base::HIST_TYPE_FLOAT)
106 {
107 bsta_joint_histogram<float> h;
108 vsl_b_read(is, h, true);
109 hptr = new bsta_joint_histogram<float>(h);
110 }
111 else if (type == bsta_joint_histogram_base::HIST_TYPE_DOUBLE)
112 {
113 bsta_joint_histogram<double> h;
114 vsl_b_read(is, h, true);
115 hptr = new bsta_joint_histogram<double>(h);
116 }
117 // else if (type == bsta_joint_histogram_base::HIST_TYPE_UNKNOWN) ;// do nothing
118 }
119 }
120
vsl_b_write(vsl_b_ostream & os,const bsta_joint_histogram_base_sptr & hptr)121 void vsl_b_write(vsl_b_ostream& os, const bsta_joint_histogram_base_sptr& hptr)
122 {
123 vsl_b_write(os, hptr.ptr());
124 }
125
vsl_b_read(vsl_b_istream & is,bsta_joint_histogram_base_sptr & hptr)126 void vsl_b_read(vsl_b_istream &is, bsta_joint_histogram_base_sptr& hptr)
127 {
128 bsta_joint_histogram_base* ptr = nullptr;
129 vsl_b_read(is, ptr);
130 hptr = ptr;
131 }
132 //
133 //============== joint_histogram_3d ==========================
134 //
135
vsl_b_write(vsl_b_ostream & os,const bsta_joint_histogram_3d_base * hptr)136 void vsl_b_write(vsl_b_ostream &os, const bsta_joint_histogram_3d_base* hptr)
137 {
138 if (hptr==nullptr)
139 vsl_b_write(os, false);
140 else {
141 vsl_b_write(os, true);
142 if (hptr->type_ == bsta_joint_histogram_3d_base::HIST_TYPE_FLOAT) {
143 const auto* hf =
144 static_cast<const bsta_joint_histogram_3d<float>*>(hptr);
145 vsl_b_write(os, *hf);
146 }
147 else if (hptr->type_ == bsta_joint_histogram_3d_base::HIST_TYPE_DOUBLE) {
148 const auto* hf =
149 static_cast<const bsta_joint_histogram_3d<double>*>(hptr);
150 vsl_b_write(os, *hf);
151 }
152 }
153 }
154
vsl_b_read(vsl_b_istream & is,bsta_joint_histogram_3d_base * & hptr)155 void vsl_b_read(vsl_b_istream &is, bsta_joint_histogram_3d_base*& hptr)
156 {
157 delete hptr; hptr = nullptr;
158 bool not_null_ptr;
159 vsl_b_read(is, not_null_ptr);
160 if (not_null_ptr)
161 {
162 short ver = 0;
163 int itype = 0;
164 vsl_b_read(is, ver);
165 if (ver != 1)
166 return;
167 vsl_b_read(is, itype);
168 auto type =
169 static_cast<bsta_joint_histogram_3d_base::bsta_joint_hist_3d_type>(itype);
170 if (type == bsta_joint_histogram_3d_base::HIST_TYPE_FLOAT)
171 {
172 bsta_joint_histogram_3d<float> h;
173 vsl_b_read(is, h, true);
174 hptr = new bsta_joint_histogram_3d<float>(h);
175 }
176 if (type == bsta_joint_histogram_3d_base::HIST_TYPE_DOUBLE)
177 {
178 bsta_joint_histogram_3d<double> h;
179 vsl_b_read(is, h, true);
180 hptr = new bsta_joint_histogram_3d<double>(h);
181 }
182 // else if (type == bsta_joint_histogram_3d_base::HIST_TYPE_UNKNOWN) ; // do nothing
183 }
184 }
185
vsl_b_write(vsl_b_ostream & os,const bsta_joint_histogram_3d_base_sptr & hptr)186 void vsl_b_write(vsl_b_ostream& os, const bsta_joint_histogram_3d_base_sptr& hptr)
187 {
188 vsl_b_write(os, hptr.ptr());
189 }
190
vsl_b_read(vsl_b_istream & is,bsta_joint_histogram_3d_base_sptr & hptr)191 void vsl_b_read(vsl_b_istream &is, bsta_joint_histogram_3d_base_sptr& hptr)
192 {
193 bsta_joint_histogram_3d_base* ptr=nullptr;
194 vsl_b_read(is, ptr);
195 hptr = ptr;
196 }
197