//*************************************************************************
//
//  EntangledList (EntangledChain Algorithm) - C++ language
//
//  EntangledList.h
//
//  Invented and developed by Armando Giuseppe BONATTO MINELLA.
//
//*************************************************************************
//
// IMPORTANT: The EntangledChain algorithm and its implementations,
//            EntangledList and EntangledTensor, are an industrial
//            secret owned by the authors.
//            For this reason, this file contains only functions
//            that return default (or null) values, solely for
//            illustrative purposes.
//
//*************************************************************************

//*************************************************************************
#ifndef ENTANGLEDLIST_H
  #define ENTANGLEDLIST_H
//*************************************************************************

//*************************************************************************
#include <cstdint>
#include <cstdlib>
//*************************************************************************

//*************************************************************************
template <typename T> struct EntangledList_Alpha_Lone {};
//*************************************************************************
template <typename T> struct EntangledList_Alpha_Page
{
  struct NODE
  {
    // Header base
    T payload;
    //-------------------------------------------------------------------------
    inline                 NODE  (const T &) {}
    inline                 ~NODE ()          {}
    inline NODE          * Next  (void)      { return (nullptr); }
    inline std::uint64_t   Index (void)      { return (UINT64_MAX); }
  };
  //-------------------------------------------------------------------------
  std::uint64_t count = 0ull;
  //-------------------------------------------------------------------------
  inline        EntangledList_Alpha_Page  ()                       {}
  inline        ~EntangledList_Alpha_Page ()                       {}
  inline NODE * First                     (void)                   { return (nullptr); }
  inline NODE * Last                      (void)                   { return (nullptr); }
  inline NODE * At                        (const std::uint64_t &)  { return (nullptr); }
  inline NODE * Prepend                   (const T &)              { return (nullptr); }
  inline NODE * Append                    (const T &)              { return (nullptr); }
  inline NODE * InsertAt                  (const std::uint64_t &,
                                           const T             & ) { return (nullptr); }
  inline NODE * RemoveFirst               (void)                   { return (nullptr); }
  inline NODE * RemoveLast                (void)                   { return (nullptr); }
  inline NODE * RemoveAt                  (const std::uint64_t &)  { return (nullptr); }
};
//*************************************************************************
template <typename T> struct EntangledList_Alpha_Thin {};
//*************************************************************************
template <typename T> struct EntangledList_Alpha_Wall {};
//*************************************************************************
template <typename T> struct EntangledList_Omega_Lone {};
//*************************************************************************
template <typename T> struct EntangledList_Omega_Page {};
//*************************************************************************
template <typename T> struct EntangledList_Omega_Thin {};
//*************************************************************************
template <typename T> struct EntangledList_Omega_Wall {};
//*************************************************************************
template <typename T> struct EntangledList_Sigma_Lone {};
//*************************************************************************
template <typename T> struct EntangledList_Sigma_Page {};
//*************************************************************************
template <typename T> struct EntangledList_Sigma_Thin {};
//*************************************************************************
template <typename T> struct EntangledList_Sigma_Wall {};
//*************************************************************************

//*************************************************************************
#endif // ENTANGLEDLIST_H
//*************************************************************************

