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