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


#include <Locker.h>

#include <Array.h>

#include "SourceCode.h"


class LocatableFile;
class SourceFile;


class FileSourceCode : public SourceCode {
public:
                                                                FileSourceCode(LocatableFile* file,
                                                                        SourceFile* sourceFile,
                                                                        SourceLanguage* language);
        virtual                                         ~FileSourceCode();

                        status_t                        Init();
                        status_t                        AddSourceLocation(
                                                                        const SourceLocation& location);

        virtual bool                            Lock();
        virtual void                            Unlock();

        virtual SourceLanguage*         GetSourceLanguage() const;

        virtual bool                            GetStatementLocationRange(
                                                                        const SourceLocation& location,
                                                                        SourceLocation& _start,
                                                                        SourceLocation& _end) const;

        virtual LocatableFile*          GetSourceFile() const;

        // LineDataSource
        virtual int32                           CountLines() const;
        virtual const char*                     LineAt(int32 index) const;
        virtual int32                           LineLengthAt(int32 index) const;

private:
                        int32                           _FindSourceLocationIndex(
                                                                        const SourceLocation& location,
                                                                        bool& _foundMatch) const;

private:
                        BLocker                         fLock;
                        LocatableFile*          fFile;
                        SourceFile*                     fSourceFile;
                        SourceLanguage*         fLanguage;
                        Array<SourceLocation> fSourceLocations;
};


#endif  // FILE_BASED_SOURCE_CODE_H