Sha256: 354340cf4a23de6529508630202c1b39f14dbb82cec99a2b07b13900378ea102

Contents?: true

Size: 1.6 KB

Versions: 14

Compression:

Stored size: 1.6 KB

Contents

#ifndef SASS_MEMORY_MANAGER_H
#define SASS_MEMORY_MANAGER_H

#include <vector>

namespace Sass {

  class Memory_Object {
  friend class Memory_Manager;
    long refcount;
  public:
    Memory_Object() { refcount = 0; };
    virtual ~Memory_Object() {};
  };

  /////////////////////////////////////////////////////////////////////////////
  // A class for tracking allocations of AST_Node objects. The intended usage
  // is something like: Some_Node* n = new (mem_mgr) Some_Node(...);
  // Then, at the end of the program, the memory manager will delete all of the
  // allocated nodes that have been passed to it.
  // In the future, this class may implement a custom allocator.
  /////////////////////////////////////////////////////////////////////////////
  class Memory_Manager {
    std::vector<Memory_Object*> nodes;

  public:
    Memory_Manager(size_t size = 0);
    ~Memory_Manager();

    bool has(Memory_Object* np);
    Memory_Object* allocate(size_t size);
    void deallocate(Memory_Object* np);
    void remove(Memory_Object* np);
    void destroy(Memory_Object* np);
    Memory_Object* add(Memory_Object* np);

  };
}

///////////////////////////////////////////////////////////////////////////////
// Use macros for the allocation task, since overloading operator `new`
// has been proven to be flaky under certain compilers (see comment below).
///////////////////////////////////////////////////////////////////////////////

#define SASS_MEMORY_NEW(mgr, Class, ...)                                                 \
  (static_cast<Class*>(mgr.add(new (mgr.allocate(sizeof(Class))) Class(__VA_ARGS__))))   \

#endif

Version data entries

14 entries across 14 versions & 2 rubygems

Version Path
sassc-1.11.1 ext/libsass/src/memory_manager.hpp
sassc-1.11.0 ext/libsass/src/memory_manager.hpp
sassc-1.10.1 ext/libsass/src/memory_manager.hpp
sassc-1.10.0 ext/libsass/src/memory_manager.hpp
blackboard-3.1.9 lib/site_template/node_modules/node-sass/src/libsass/src/memory_manager.hpp
sassc-1.9.0 ext/libsass/src/memory_manager.hpp
sassc-1.8.5 ext/libsass/src/memory_manager.hpp
sassc-1.8.4 ext/libsass/src/memory_manager.hpp
sassc-1.8.3 ext/libsass/src/memory_manager.hpp
sassc-1.8.2 ext/libsass/src/memory_manager.hpp
sassc-1.8.1 ext/libsass/src/memory_manager.hpp
sassc-1.8.0 ext/libsass/src/memory_manager.hpp
sassc-1.8.0.pre2 ext/libsass/src/memory_manager.hpp
sassc-1.8.0.pre1 ext/libsass/src/memory_manager.hpp