comparison libinterp/corefcn/oct-map.h @ 29922:adda9f3ac61f

use m_ prefix for data members in octave_map classes * oct-map.h, oct-map.cc: Use m_ prefix for class data members.
author John W. Eaton <jwe@octave.org>
date Tue, 27 Jul 2021 09:53:16 -0400
parents 29a1f8fd8ee6
children 796f54d4ddbf
comparison
equal deleted inserted replaced
29921:6b7ac07ffa85 29922:adda9f3ac61f
43 octave_fields 43 octave_fields
44 { 44 {
45 class fields_rep : public std::map<std::string, octave_idx_type> 45 class fields_rep : public std::map<std::string, octave_idx_type>
46 { 46 {
47 public: 47 public:
48 fields_rep (void) : std::map<std::string, octave_idx_type> (), count (1) { } 48 fields_rep (void) : std::map<std::string, octave_idx_type> (), m_count (1) { }
49 fields_rep (const fields_rep& other) 49 fields_rep (const fields_rep& other)
50 : std::map<std::string, octave_idx_type> (other), count (1) { } 50 : std::map<std::string, octave_idx_type> (other), m_count (1) { }
51 51
52 octave::refcount<octave_idx_type> count; 52 octave::refcount<octave_idx_type> m_count;
53 53
54 private: 54 private:
55 fields_rep& operator = (const fields_rep&); // no assignment! 55 fields_rep& operator = (const fields_rep&); // no assignment!
56 }; 56 };
57 57
58 fields_rep *rep; 58 fields_rep *m_rep;
59 59
60 static fields_rep *nil_rep (void); 60 static fields_rep *nil_rep (void);
61 61
62 public: 62 public:
63 63
64 octave_fields (void) : rep (nil_rep ()) { rep->count++; } 64 octave_fields (void) : m_rep (nil_rep ()) { m_rep->m_count++; }
65 octave_fields (const string_vector&); 65 octave_fields (const string_vector&);
66 octave_fields (const char * const *); 66 octave_fields (const char * const *);
67 67
68 ~octave_fields (void) 68 ~octave_fields (void)
69 { 69 {
70 if (--rep->count == 0) 70 if (--m_rep->m_count == 0)
71 delete rep; 71 delete m_rep;
72 } 72 }
73 73
74 void make_unique (void) 74 void make_unique (void)
75 { 75 {
76 if (rep->count > 1) 76 if (m_rep->m_count > 1)
77 { 77 {
78 fields_rep *r = new fields_rep (*rep); 78 fields_rep *r = new fields_rep (*m_rep);
79 79
80 if (--rep->count == 0) 80 if (--m_rep->m_count == 0)
81 delete rep; 81 delete m_rep;
82 82
83 rep = r; 83 m_rep = r;
84 } 84 }
85 } 85 }
86 86
87 octave_fields (const octave_fields& o) : rep (o.rep) { rep->count++; } 87 octave_fields (const octave_fields& o) : m_rep (o.m_rep) { m_rep->m_count++; }
88 88
89 octave_fields& 89 octave_fields&
90 operator = (const octave_fields& o) 90 operator = (const octave_fields& o)
91 { 91 {
92 if (&o != this) 92 if (&o != this)
93 { 93 {
94 o.rep->count++; 94 o.m_rep->m_count++;
95 if (--rep->count == 0) 95 if (--m_rep->m_count == 0)
96 delete rep; 96 delete m_rep;
97 rep = o.rep; 97 m_rep = o.m_rep;
98 } 98 }
99 99
100 return *this; 100 return *this;
101 } 101 }
102 102
103 // constant iteration support. non-const iteration intentionally unsupported. 103 // constant iteration support. non-const iteration intentionally unsupported.
104 104
105 typedef std::map<std::string, octave_idx_type>::const_iterator const_iterator; 105 typedef std::map<std::string, octave_idx_type>::const_iterator const_iterator;
106 typedef const_iterator iterator; 106 typedef const_iterator iterator;
107 107
108 const_iterator begin (void) const { return rep->begin (); } 108 const_iterator begin (void) const { return m_rep->begin (); }
109 const_iterator end (void) const { return rep->end (); } 109 const_iterator end (void) const { return m_rep->end (); }
110 110
111 const_iterator cbegin (void) const { return rep->cbegin (); } 111 const_iterator cbegin (void) const { return m_rep->cbegin (); }
112 const_iterator cend (void) const { return rep->cend (); } 112 const_iterator cend (void) const { return m_rep->cend (); }
113 113
114 std::string key (const_iterator p) const { return p->first; } 114 std::string key (const_iterator p) const { return p->first; }
115 octave_idx_type index (const_iterator p) const { return p->second; } 115 octave_idx_type index (const_iterator p) const { return p->second; }
116 116
117 const_iterator seek (const std::string& k) const 117 const_iterator seek (const std::string& k) const
118 { return rep->find (k); } 118 { return m_rep->find (k); }
119 119
120 // high-level methods. 120 // high-level methods.
121 121
122 // number of fields. 122 // number of fields.
123 octave_idx_type nfields (void) const { return rep->size (); } 123 octave_idx_type nfields (void) const { return m_rep->size (); }
124 124
125 // check whether a field exists. 125 // check whether a field exists.
126 bool isfield (const std::string& name) const; 126 bool isfield (const std::string& name) const;
127 127
128 // get index of field. return -1 if not exist 128 // get index of field. return -1 if not exist
144 144
145 bool equal_up_to_order (const octave_fields& other, 145 bool equal_up_to_order (const octave_fields& other,
146 Array<octave_idx_type>& perm) const; 146 Array<octave_idx_type>& perm) const;
147 147
148 bool is_same (const octave_fields& other) const 148 bool is_same (const octave_fields& other) const
149 { return rep == other.rep; } 149 { return m_rep == other.m_rep; }
150 150
151 // Returns the fields as a vector of strings. 151 // Returns the fields as a vector of strings.
152 string_vector fieldnames (void) const; 152 string_vector fieldnames (void) const;
153 153
154 void clear (void) 154 void clear (void)
161 octave_scalar_map 161 octave_scalar_map
162 { 162 {
163 public: 163 public:
164 164
165 octave_scalar_map (const octave_fields& k) 165 octave_scalar_map (const octave_fields& k)
166 : xkeys (k), xvals (k.nfields ()) { } 166 : m_keys (k), m_vals (k.nfields ()) { }
167 167
168 octave_scalar_map (void) : xkeys (), xvals () { } 168 octave_scalar_map (void) : m_keys (), m_vals () { }
169 169
170 octave_scalar_map (const string_vector& k) 170 octave_scalar_map (const string_vector& k)
171 : xkeys (k), xvals (k.numel ()) { } 171 : m_keys (k), m_vals (k.numel ()) { }
172 172
173 octave_scalar_map (const octave_scalar_map& m) 173 octave_scalar_map (const octave_scalar_map& m)
174 : xkeys (m.xkeys), xvals (m.xvals) { } 174 : m_keys (m.m_keys), m_vals (m.m_vals) { }
175 175
176 octave_scalar_map (const std::map<std::string, octave_value>& m); 176 octave_scalar_map (const std::map<std::string, octave_value>& m);
177 177
178 octave_scalar_map& operator = (const octave_scalar_map& m) 178 octave_scalar_map& operator = (const octave_scalar_map& m)
179 { 179 {
180 xkeys = m.xkeys; 180 m_keys = m.m_keys;
181 xvals = m.xvals; 181 m_vals = m.m_vals;
182 182
183 return *this; 183 return *this;
184 } 184 }
185 185
186 // iteration support. 186 // iteration support.
187 // note that both const and non-const iterators are the same. 187 // note that both const and non-const iterators are the same.
188 // The const/non-const distinction is made by the key & contents method. 188 // The const/non-const distinction is made by the key & contents method.
189 typedef octave_fields::const_iterator const_iterator; 189 typedef octave_fields::const_iterator const_iterator;
190 typedef const_iterator iterator; 190 typedef const_iterator iterator;
191 191
192 const_iterator begin (void) const { return xkeys.begin (); } 192 const_iterator begin (void) const { return m_keys.begin (); }
193 const_iterator end (void) const { return xkeys.end (); } 193 const_iterator end (void) const { return m_keys.end (); }
194 194
195 const_iterator cbegin (void) const { return xkeys.cbegin (); } 195 const_iterator cbegin (void) const { return m_keys.cbegin (); }
196 const_iterator cend (void) const { return xkeys.cend (); } 196 const_iterator cend (void) const { return m_keys.cend (); }
197 197
198 const_iterator seek (const std::string& k) const { return xkeys.seek (k); } 198 const_iterator seek (const std::string& k) const { return m_keys.seek (k); }
199 199
200 std::string key (const_iterator p) const 200 std::string key (const_iterator p) const
201 { return xkeys.key (p); } 201 { return m_keys.key (p); }
202 octave_idx_type index (const_iterator p) const 202 octave_idx_type index (const_iterator p) const
203 { return xkeys.index (p); } 203 { return m_keys.index (p); }
204 204
205 const octave_value& contents (const_iterator p) const 205 const octave_value& contents (const_iterator p) const
206 { return xvals[xkeys.index (p)]; } 206 { return m_vals[m_keys.index (p)]; }
207 207
208 octave_value& contents (iterator p) 208 octave_value& contents (iterator p)
209 { return xvals[xkeys.index (p)]; } 209 { return m_vals[m_keys.index (p)]; }
210 210
211 const octave_value& contents (octave_idx_type i) const 211 const octave_value& contents (octave_idx_type i) const
212 { return xvals[i]; } 212 { return m_vals[i]; }
213 213
214 octave_value& contents (octave_idx_type i) 214 octave_value& contents (octave_idx_type i)
215 { return xvals[i]; } 215 { return m_vals[i]; }
216 216
217 // number of fields. 217 // number of fields.
218 octave_idx_type nfields (void) const { return xkeys.nfields (); } 218 octave_idx_type nfields (void) const { return m_keys.nfields (); }
219 219
220 // check whether a field exists. 220 // check whether a field exists.
221 bool isfield (const std::string& name) const 221 bool isfield (const std::string& name) const
222 { return xkeys.isfield (name); } 222 { return m_keys.isfield (name); }
223 223
224 bool contains (const std::string& name) const 224 bool contains (const std::string& name) const
225 { return isfield (name); } 225 { return isfield (name); }
226 226
227 string_vector fieldnames (void) const 227 string_vector fieldnames (void) const
228 { return xkeys.fieldnames (); } 228 { return m_keys.fieldnames (); }
229 229
230 string_vector keys (void) const 230 string_vector keys (void) const
231 { return fieldnames (); } 231 { return fieldnames (); }
232 232
233 // get contents of a given field. empty value if not exist. 233 // get contents of a given field. empty value if not exist.
252 octave_value contents (const std::string& k) const; 252 octave_value contents (const std::string& k) const;
253 octave_value& contents (const std::string& k); 253 octave_value& contents (const std::string& k);
254 254
255 void clear (void) 255 void clear (void)
256 { 256 {
257 xkeys.clear (); 257 m_keys.clear ();
258 xvals.clear (); 258 m_vals.clear ();
259 } 259 }
260 260
261 friend class octave_map; 261 friend class octave_map;
262 262
263 private: 263 private:
264 264
265 octave_fields xkeys; 265 octave_fields m_keys;
266 std::vector<octave_value> xvals; 266 std::vector<octave_value> m_vals;
267 267
268 }; 268 };
269 269
270 template <> 270 template <>
271 inline octave_scalar_map 271 inline octave_scalar_map
276 octave_map 276 octave_map
277 { 277 {
278 public: 278 public:
279 279
280 octave_map (const octave_fields& k) 280 octave_map (const octave_fields& k)
281 : xkeys (k), xvals (k.nfields ()), dimensions () { } 281 : m_keys (k), m_vals (k.nfields ()), m_dimensions () { }
282 282
283 octave_map (const dim_vector& dv, const octave_fields& k) 283 octave_map (const dim_vector& dv, const octave_fields& k)
284 : xkeys (k), xvals (k.nfields (), Cell (dv)), dimensions (dv) { } 284 : m_keys (k), m_vals (k.nfields (), Cell (dv)), m_dimensions (dv) { }
285 285
286 typedef octave_scalar_map element_type; 286 typedef octave_scalar_map element_type;
287 287
288 octave_map (void) : xkeys (), xvals (), dimensions () { } 288 octave_map (void) : m_keys (), m_vals (), m_dimensions () { }
289 289
290 octave_map (const dim_vector& dv) : xkeys (), xvals (), dimensions (dv) { } 290 octave_map (const dim_vector& dv) : m_keys (), m_vals (), m_dimensions (dv) { }
291 291
292 octave_map (const string_vector& k) 292 octave_map (const string_vector& k)
293 : xkeys (k), xvals (k.numel (), Cell (1, 1)), dimensions (1, 1) { } 293 : m_keys (k), m_vals (k.numel (), Cell (1, 1)), m_dimensions (1, 1) { }
294 294
295 octave_map (const dim_vector& dv, const string_vector& k) 295 octave_map (const dim_vector& dv, const string_vector& k)
296 : xkeys (k), xvals (k.numel (), Cell (dv)), dimensions (dv) { } 296 : m_keys (k), m_vals (k.numel (), Cell (dv)), m_dimensions (dv) { }
297 297
298 octave_map (const octave_map& m) 298 octave_map (const octave_map& m)
299 : xkeys (m.xkeys), xvals (m.xvals), dimensions (m.dimensions) { } 299 : m_keys (m.m_keys), m_vals (m.m_vals), m_dimensions (m.m_dimensions) { }
300 300
301 octave_map (const octave_scalar_map& m); 301 octave_map (const octave_scalar_map& m);
302 302
303 octave_map& operator = (const octave_map& m) 303 octave_map& operator = (const octave_map& m)
304 { 304 {
305 xkeys = m.xkeys; 305 m_keys = m.m_keys;
306 xvals = m.xvals; 306 m_vals = m.m_vals;
307 dimensions = m.dimensions; 307 m_dimensions = m.m_dimensions;
308 308
309 return *this; 309 return *this;
310 } 310 }
311 311
312 // iteration support. 312 // iteration support.
313 // note that both const and non-const iterators are the same. 313 // note that both const and non-const iterators are the same.
314 // The const/non-const distinction is made by the key & contents method. 314 // The const/non-const distinction is made by the key & contents method.
315 typedef octave_fields::const_iterator const_iterator; 315 typedef octave_fields::const_iterator const_iterator;
316 typedef const_iterator iterator; 316 typedef const_iterator iterator;
317 317
318 const_iterator begin (void) const { return xkeys.begin (); } 318 const_iterator begin (void) const { return m_keys.begin (); }
319 const_iterator end (void) const { return xkeys.end (); } 319 const_iterator end (void) const { return m_keys.end (); }
320 320
321 const_iterator cbegin (void) const { return xkeys.cbegin (); } 321 const_iterator cbegin (void) const { return m_keys.cbegin (); }
322 const_iterator cend (void) const { return xkeys.cend (); } 322 const_iterator cend (void) const { return m_keys.cend (); }
323 323
324 const_iterator seek (const std::string& k) const { return xkeys.seek (k); } 324 const_iterator seek (const std::string& k) const { return m_keys.seek (k); }
325 325
326 std::string key (const_iterator p) const 326 std::string key (const_iterator p) const
327 { return xkeys.key (p); } 327 { return m_keys.key (p); }
328 octave_idx_type index (const_iterator p) const 328 octave_idx_type index (const_iterator p) const
329 { return xkeys.index (p); } 329 { return m_keys.index (p); }
330 330
331 const Cell& contents (const_iterator p) const 331 const Cell& contents (const_iterator p) const
332 { return xvals[xkeys.index (p)]; } 332 { return m_vals[m_keys.index (p)]; }
333 333
334 Cell& contents (iterator p) 334 Cell& contents (iterator p)
335 { return xvals[xkeys.index (p)]; } 335 { return m_vals[m_keys.index (p)]; }
336 336
337 const Cell& contents (octave_idx_type i) const 337 const Cell& contents (octave_idx_type i) const
338 { return xvals[i]; } 338 { return m_vals[i]; }
339 339
340 Cell& contents (octave_idx_type i) 340 Cell& contents (octave_idx_type i)
341 { return xvals[i]; } 341 { return m_vals[i]; }
342 342
343 // number of fields. 343 // number of fields.
344 octave_idx_type nfields (void) const { return xkeys.nfields (); } 344 octave_idx_type nfields (void) const { return m_keys.nfields (); }
345 345
346 // check whether a field exists. 346 // check whether a field exists.
347 bool isfield (const std::string& name) const 347 bool isfield (const std::string& name) const
348 { return xkeys.isfield (name); } 348 { return m_keys.isfield (name); }
349 349
350 bool contains (const std::string& name) const 350 bool contains (const std::string& name) const
351 { return isfield (name); } 351 { return isfield (name); }
352 352
353 string_vector fieldnames (void) const 353 string_vector fieldnames (void) const
354 { return xkeys.fieldnames (); } 354 { return m_keys.fieldnames (); }
355 355
356 string_vector keys (void) const 356 string_vector keys (void) const
357 { return fieldnames (); } 357 { return fieldnames (); }
358 358
359 // get contents of a given field. empty value if not exist. 359 // get contents of a given field. empty value if not exist.
360 Cell getfield (const std::string& key) const; 360 Cell getfield (const std::string& key) const;
361 361
362 // set contents of a given field. add if not exist. checks for 362 // set contents of a given field. add if not exist. checks for
363 // correct dimensions. 363 // correct m_dimensions.
364 void setfield (const std::string& key, const Cell& val); 364 void setfield (const std::string& key, const Cell& val);
365 void assign (const std::string& k, const Cell& val) 365 void assign (const std::string& k, const Cell& val)
366 { setfield (k, val); } 366 { setfield (k, val); }
367 367
368 // remove a given field. do nothing if not exist. 368 // remove a given field. do nothing if not exist.
379 Cell contents (const std::string& k) const; 379 Cell contents (const std::string& k) const;
380 Cell& contents (const std::string& k); 380 Cell& contents (const std::string& k);
381 381
382 void clear (void) 382 void clear (void)
383 { 383 {
384 xkeys.clear (); 384 m_keys.clear ();
385 xvals.clear (); 385 m_vals.clear ();
386 } 386 }
387 387
388 // The Array-like methods. 388 // The Array-like methods.
389 octave_idx_type numel (void) const { return dimensions.numel (); } 389 octave_idx_type numel (void) const { return m_dimensions.numel (); }
390 octave_idx_type length (void) const { return numel (); } 390 octave_idx_type length (void) const { return numel (); }
391 bool isempty (void) const { return dimensions.any_zero (); } 391 bool isempty (void) const { return m_dimensions.any_zero (); }
392 392
393 octave_idx_type rows (void) const { return dimensions(0); } 393 octave_idx_type rows (void) const { return m_dimensions(0); }
394 octave_idx_type cols (void) const { return dimensions(1); } 394 octave_idx_type cols (void) const { return m_dimensions(1); }
395 octave_idx_type columns (void) const { return dimensions(1); } 395 octave_idx_type columns (void) const { return m_dimensions(1); }
396 396
397 // Extract a scalar substructure. 397 // Extract a scalar substructure.
398 // FIXME: actually check something. 398 // FIXME: actually check something.
399 octave_scalar_map checkelem (octave_idx_type n) const 399 octave_scalar_map checkelem (octave_idx_type n) const
400 { return elem (n); } 400 { return elem (n); }
425 425
426 octave_map squeeze (void) const; 426 octave_map squeeze (void) const;
427 427
428 octave_map permute (const Array<int>& vec, bool inv = false) const; 428 octave_map permute (const Array<int>& vec, bool inv = false) const;
429 429
430 dim_vector dims (void) const { return dimensions; } 430 dim_vector dims (void) const { return m_dimensions; }
431 431
432 int ndims (void) const { return dimensions.ndims (); } 432 int ndims (void) const { return m_dimensions.ndims (); }
433 433
434 octave_map transpose (void) const; 434 octave_map transpose (void) const;
435 435
436 octave_map reshape (const dim_vector& dv) const; 436 octave_map reshape (const dim_vector& dv) const;
437 437
485 // element assignment, no bounds check 485 // element assignment, no bounds check
486 bool fast_elem_insert (octave_idx_type n, const octave_scalar_map& rhs); 486 bool fast_elem_insert (octave_idx_type n, const octave_scalar_map& rhs);
487 487
488 private: 488 private:
489 489
490 octave_fields xkeys; 490 octave_fields m_keys;
491 std::vector<Cell> xvals; 491 std::vector<Cell> m_vals;
492 dim_vector dimensions; 492 dim_vector m_dimensions;
493 493
494 void optimize_dimensions (void); 494 void optimize_dimensions (void);
495 void extract_scalar (octave_scalar_map& dest, 495 void extract_scalar (octave_scalar_map& dest,
496 octave_idx_type index) const; 496 octave_idx_type index) const;
497 static void do_cat (int dim, octave_idx_type n, 497 static void do_cat (int dim, octave_idx_type n,