diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2025-07-07 13:51:36 +0200 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2025-07-07 14:55:55 +0200 |
| commit | bdde3e5d2bd6df79557e219f3b5f148aa0914390 (patch) | |
| tree | 910d00a8257c8b8a3f4a3916547328c68a72661b | |
| parent | 51cca24d04768dc73a8d0317db757a0ed7f69eaf (diff) | |
Fl_Table_Row: replace private class CharVector with std::vector
FL/Fl_Table_Row.H: use `std::vector<uint8_t> _rowselect;`,
remove declaration of class `CharVector`
src/Fl_Table_Row.cxx: remove implementation of class `CharVector`,
simplify loops (use range based for loops),
use resize() to change vector size.
Unify copyright year of Fl_Table* headers and implementation.
| -rw-r--r-- | FL/Fl_Table.H | 2 | ||||
| -rw-r--r-- | FL/Fl_Table_Row.H | 61 | ||||
| -rw-r--r-- | src/Fl_Table.cxx | 2 | ||||
| -rw-r--r-- | src/Fl_Table_Row.cxx | 53 |
4 files changed, 25 insertions, 93 deletions
diff --git a/FL/Fl_Table.H b/FL/Fl_Table.H index 99ceb3009..d4a149da5 100644 --- a/FL/Fl_Table.H +++ b/FL/Fl_Table.H @@ -3,7 +3,7 @@ // // Copyright 2002 by Greg Ercolano. // Copyright (c) 2004 O'ksi'D -// Copyright 2023 by Bill Spitzak and others. +// Copyright 2009-2025 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this diff --git a/FL/Fl_Table_Row.H b/FL/Fl_Table_Row.H index 93f8b0e8c..28b1d05b4 100644 --- a/FL/Fl_Table_Row.H +++ b/FL/Fl_Table_Row.H @@ -1,15 +1,11 @@ // - -#ifndef _FL_TABLE_ROW_H -#define _FL_TABLE_ROW_H - -// // Fl_Table_Row -- A row oriented table widget for the Fast Light Tool Kit (FLTK). // // A class specializing in a table of rows. // Handles row-specific selection behavior. // // Copyright 2002 by Greg Ercolano. +// Copyright 2009-2025 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -22,8 +18,14 @@ // https://www.fltk.org/bugs.php // +#ifndef _FL_TABLE_ROW_H +#define _FL_TABLE_ROW_H + #include <FL/Fl_Table.H> +#include <stdint.h> +#include <vector> + /** A table with row selection capabilities. @@ -49,55 +51,8 @@ public: SELECT_MULTI // multiple row selection (default) }; private: - // An STL-ish vector without templates - class FL_EXPORT CharVector { - char *arr; - int _size; - void init() { - arr = 0; - _size = 0; - } - void copy(char *newarr, int newsize); - public: - CharVector() { // CTOR - init(); - } - ~CharVector(); // DTOR - CharVector(CharVector&o) { // COPY CTOR - init(); - copy(o.arr, o._size); - } - CharVector& operator=(CharVector&o) { // ASSIGN - init(); - copy(o.arr, o._size); - return(*this); - } - char operator[](int x) const { - return(arr[x]); - } - char& operator[](int x) { - return(arr[x]); - } - int size() { - return(_size); - } - void size(int count); - char pop_back() { - char tmp = arr[_size-1]; - _size--; - return(tmp); - } - void push_back(char val) { - int x = _size; - size(_size+1); - arr[x] = val; - } - char back() { - return(arr[_size-1]); - } - }; - CharVector _rowselect; // selection flag for each row + std::vector<uint8_t> _rowselect; // selection flag for each row // handle() state variables. // Put here instead of local statics in handle(), so more diff --git a/src/Fl_Table.cxx b/src/Fl_Table.cxx index d970659a0..b7fb817c4 100644 --- a/src/Fl_Table.cxx +++ b/src/Fl_Table.cxx @@ -3,7 +3,7 @@ // // Copyright 2002 by Greg Ercolano. // Copyright (c) 2004 O'ksi'D -// Copyright 2023-2025 by Bill Spitzak and others. +// Copyright 2009-2025 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this diff --git a/src/Fl_Table_Row.cxx b/src/Fl_Table_Row.cxx index 6c7e457f9..849cd0383 100644 --- a/src/Fl_Table_Row.cxx +++ b/src/Fl_Table_Row.cxx @@ -5,6 +5,7 @@ // Handles row-specific selection behavior. // // Copyright 2002 by Greg Ercolano. +// Copyright 2009-2025 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -38,31 +39,6 @@ #define PRINTEVENT #endif -// An STL-ish vector without templates (private to Fl_Table_Row) - -void Fl_Table_Row::CharVector::copy(char *newarr, int newsize) { - size(newsize); - memcpy(arr, newarr, newsize * sizeof(char)); -} - -Fl_Table_Row::CharVector::~CharVector() { // DTOR - if (arr) free(arr); - arr = 0; -} - -void Fl_Table_Row::CharVector::size(int count) { - if (count <= 0 ) { // Same state as init() - (issue #296) - if ( arr ) free(arr); - arr = 0; - _size = 0; - return; - } - if (count != _size) { - arr = (char*)realloc(arr, (unsigned)count * sizeof(char)); - _size = count; - } -} - /** Checks to see if 'row' is selected. @@ -89,18 +65,18 @@ void Fl_Table_Row::type(TableRowSelectMode val) { _selectmode = val; switch ( _selectmode ) { case SELECT_NONE: { - for ( int row=0; row<rows(); row++ ) { - _rowselect[row] = 0; + for (auto &sel : _rowselect) { + sel = 0; } redraw(); break; } case SELECT_SINGLE: { int count = 0; - for ( int row=0; row<rows(); row++ ) { - if ( _rowselect[row] ) { - if ( ++count > 1 ) { // only one allowed - _rowselect[row] = 0; + for (auto &sel : _rowselect) { + if (sel) { + if (++count > 1) { // only one allowed + sel = 0; } } } @@ -184,14 +160,14 @@ void Fl_Table_Row::select_all_rows(int flag) { case SELECT_MULTI: { char changed = 0; if ( flag == 2 ) { - for ( int row=0; row<(int)_rowselect.size(); row++ ) { - _rowselect[row] ^= 1; + for (auto &sel : _rowselect) { + sel ^= 1; } changed = 1; } else { - for ( int row=0; row<(int)_rowselect.size(); row++ ) { - changed |= (_rowselect[row] != flag)?1:0; - _rowselect[row] = flag; + for (auto &sel : _rowselect) { + changed |= (sel != flag) ? 1 : 0; + sel = flag; } } if ( changed ) { @@ -203,9 +179,10 @@ void Fl_Table_Row::select_all_rows(int flag) { // Set number of rows void Fl_Table_Row::rows(int val) { - while ( val > (int)_rowselect.size() ) { _rowselect.push_back(0); } // enlarge + // Note: order of operations below matters, see PR #1187 + if (val > (int)_rowselect.size()) { _rowselect.resize(val, 0); } // enlarge Fl_Table::rows(val); - while ( val < (int)_rowselect.size() ) { _rowselect.pop_back(); } // shrink + if (val < (int)_rowselect.size()) { _rowselect.resize(val); } // shrink } // Handle events |
