// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef EMBEDDERS_OPENGLUI_COMMON_RESOURCE_H_
#define EMBEDDERS_OPENGLUI_COMMON_RESOURCE_H_

#include <stdlib.h>

class Resource {
  public:
    explicit Resource(const char* path)
        :  path_(path),
           descriptor_(-1),
           start_(0),
           length_(-1) {
    }

    const char* path() {
      return path_;
    }

    virtual int32_t descriptor() {
      return descriptor_;
    }

    virtual off_t start() {
      return start_;
    }

    virtual off_t length() {
      return length_;
    }

    virtual int32_t Open() {
      return -1;
    }

    virtual void Close() {
    }

    virtual int32_t Read(void* buffer, size_t count) {
      return -1;
    }

    virtual ~Resource() {
    }

  protected:
    const char* path_;
    int32_t descriptor_;
    off_t start_;
    off_t length_;
};

#endif  // EMBEDDERS_OPENGLUI_COMMON_RESOURCE_H_

