
// SPDX-License-Identifier: CC-BY-NC-SA-4.0
//
// Copyright (C) 2026 Bit by Bit Signal Processing LLC (https://bxbsp.com)
//
// This work is placed under the "Creative Commons Attribution
// NonCommercial ShareAlike 4.0 International" license, known
// by the shortened acronym "CC-BY-NC-SA-4.0".
//
// This work is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
// A CC-BY-NC-SA-4.0 license allows you to use this work for
// noncommercial purposes so long as attribution is made to the
// original author.  Modified versions of this work may be distributed,
// but only under the same license.  For further details, see the
// Creative Commons License "CC-BY-NC-SA-4.0".
//
// You should have received a copy of the CC-BY-NC-SA-4.0 license
// along with this work. If not, see
// <https://creativecommons.org/licenses/by-nc-sa/4.0/>.
//
//

#ifndef BASICLIST_HH
#define BASICLIST_HH


class BasicListElement
{
  BasicListElement* next_element;
  BasicListElement* previous_element;
  
  friend class BasicList;

public:

  BasicListElement* next()      { return next_element; }
  BasicListElement* previous()  { return previous_element; }

  BasicListElement() { next_element = previous_element = 0; }
  virtual ~BasicListElement() { }
};

class BasicList
{
  BasicListElement* first_element;
  BasicListElement* last_element;

public:
  BasicList() { first_element = last_element = 0; }
  ~BasicList();

  void              addAtEnd(BasicListElement* e);
  void              remove(BasicListElement* e);
  void              replace_extract(BasicListElement* orig, BasicListElement* replacement);
  
  BasicListElement* first()  { return first_element; }
  BasicListElement* last()   { return last_element; }
};


#endif
