// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП
//
// textlink.h Copyright (c) Гергель В.П. 03.09.2000, 19.01.2003
//
// класс объектов-значений для строк текста

#ifndef __TEXTLINK_H
#define __TEXTLINK_H

#include <alloc.h>
#include <string.h>
#include "texters.h"
#include "datvalue.h"

#define TextLineLength  20
#define MemSize         20

class   TText;
class   TTextLink;
typedef TTextLink * PTTextLink;
typedef char TStr[TextLineLength];

class TTextMem {
  PTTextLink pFirst; // указатели на первое звено
  PTTextLink pLast;  // указатели на последнее звено
  PTTextLink pFree;  // указатели на первое свободное звено
  friend class TTextLink;
};
typedef TTextMem * PTTextMem;

class TTextLink : public TDatValue {
  protected:
    TStr Str;
    PTTextLink pNext, pDown;
    // система управления памятью
    static TTextMem MemHeader;
  public:
    static void InitMemSystem (int size=MemSize); // инииализация памяти
    static void PrintFreeLink (void);             // печать свободных звеньев
    void * operator new (size_t size);            // выделение звена
    void operator delete (void *pM);              // освобождение звена
    static void MemCleaner(const TText &txt);     // сборка мусора
  public:
    TTextLink ( TStr s=NULL, PTTextLink pn=NULL, PTTextLink pd=NULL ) {
      pNext = pn; pDown = pd;
      if ( s != NULL ) strcpy(Str,s); else Str[0]='\0';
    }
   ~TTextLink() {}
    int IsAtom() { return pDown == NULL;  } // проверка атомарности звена
    PTTextLink  GetNext() { return pNext; }
    PTTextLink  GetDown() { return pDown; }
    TDatValue * GetCopy() { return new TTextLink(Str,pNext,pDown); }
  protected:
    virtual void Print(ostream &os) { os << Str; }
  friend class TText;
};
#endif
// end of textlink.h
Хостинг от uCoz