root/headers/private/debugger/files/SourceFile.h
/*
 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */
#ifndef SOURCE_FILE_H
#define SOURCE_FILE_H

#include <Referenceable.h>


class SourceFile;


class SourceFileOwner {
public:
        virtual                                         ~SourceFileOwner();

        virtual void                            SourceFileUnused(SourceFile* sourceFile) = 0;
        virtual void                            SourceFileDeleted(SourceFile* sourceFile) = 0;
};



class SourceFile : public BReferenceable {
public:
                                                                SourceFile(SourceFileOwner* owner);
                                                                ~SourceFile();

                        status_t                        Init(const char* path);

                        int32                           CountLines() const;
                        const char*                     LineAt(int32 index) const;
                        int32                           LineLengthAt(int32 index) const;

protected:
        virtual void                            LastReferenceReleased();

private:
                        SourceFileOwner*        fOwner;
                        char*                           fFileContent;
                        int32*                          fLineOffsets;
                        int32                           fLineCount;
};



#endif  // SOURCE_FILE_H