view anagram/agcore/textfile.h @ 6:607e3be6bad8

Adjust to the moving target called the C++ standard. Apparently nowadays it's not allowed to define an explicit copy constructor but not an assignment operator. Consequently, defining the explicit copy constructor in terms of the implicit/automatic assignment operator for general convenience no longer works. Add assignment operators. Caution: not tested with the IBM compiler, but there's no particular reason it shouldn't work.
author David A. Holland
date Mon, 30 May 2022 23:46:22 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * AnaGram, A System for Syntax Directed Programming
 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
 * See the file COPYING for license and usage terms.
 *
 * textfile.h
 */

#ifndef TEXTFILE_H
#define TEXTFILE_H

#include "agarray.h"
#include "agstring.h"
#include "cint.h"
#include "search.h"

class text_file {
public:
  AgString name;           /* name of file */
  AgString text;           /* body of file */
  AgArray<int> lx;           /* array of line indices */
  unsigned width;          /* length of longest line? */
  unsigned stringLength;
  int truncated;
  int readFlags;

  // Constructors

  text_file(void) : lx(), width(0) {}
  text_file(const char *);
  text_file(const AgString s);
  text_file(const char *, int flags /* = O_TEXT|O_RDONLY */);
  text_file(const AgString s, int flags /* = O_TEXT|O_RDONLY */);

  text_file(const text_file &t);

  text_file &operator = (const text_file &t);
  void find_lines(void);
  void read_file(int flags);
  void read_file();
  cint size() const { return cint(width, lx.size()); }
  operator char * (void) const { return text.pointer(); }
  operator unsigned char * (void) const {
    return (unsigned char *) text.pointer();
  }
  char *line(const unsigned ln) const { return text.pointer() + lx[ln]; }

  SearchProcess searchProcess;
  int findNext(cint &loc, AgString s);
  int findPrev(cint &loc, AgString s);
};

#endif /* TEXTFILE_H */