ifndef SASS_SOURCE_H define SASS_SOURCE_H

include “sass.hpp” include “memory.hpp” include “position.hpp” include “source_data.hpp”

namespace Sass {

class SourceFile :
  public SourceData {
protected:
  char* path;
  char* data;
  size_t length;
  size_t srcid;
public:

  SourceFile(
    const char* path,
    const char* data,
    size_t srcid);

  ~SourceFile();

  const char* end() const override final;
  const char* begin() const override final;
  virtual const char* getRawData() const override;
  virtual SourceSpan getSourceSpan() override;

  size_t size() const override final {
    return length;
  }

  virtual const char* getPath() const override {
    return path;
  }

  virtual size_t getSrcId() const override {
    return srcid;
  }

};

class SynthFile :
  public SourceData {
protected:
  const char* path;
public:

  SynthFile(
    const char* path) :
    path(path)
  {}

  ~SynthFile() {}

  const char* end() const override final { return nullptr; }
  const char* begin() const override final { return nullptr; };
  virtual const char* getRawData() const override { return nullptr; };
  virtual SourceSpan getSourceSpan() override { return SourceSpan(path); };

  size_t size() const override final {
    return 0;
  }

  virtual const char* getPath() const override {
    return path;
  }

  virtual size_t getSrcId() const override {
    return std::string::npos;
  }

};

class ItplFile :
  public SourceFile {
private:
  SourceSpan pstate;
public:

  ItplFile(const char* data,
    const SourceSpan& pstate);

  // Offset getPosition() const override final;
  const char* getRawData() const override final;
  SourceSpan getSourceSpan() override final;
};

}

endif