Program Listing for File memory_piece.h

Return to documentation for file (src/tensors/memory_piece.h)

#pragma once

#include "common/definitions.h"

#include <iostream>

namespace marian {

class MemoryPiece {
private:
  uint8_t* data_;
  size_t size_;

  ENABLE_INTRUSIVE_PTR(MemoryPiece)

  // Contructor is private, use MemoryPiece::New(...)
  MemoryPiece(uint8_t* data, size_t size) : data_(data), size_(size) {}

public:
  // Use this whenever pointing to MemoryPiece
  typedef IPtr<MemoryPiece> PtrType;

  // Use this whenever creating a pointer to MemoryPiece
  template <class ...Args>
  static PtrType New(Args&& ...args) {
    return PtrType(new MemoryPiece(std::forward<Args>(args)...));
  }

  uint8_t* data() const { return data_; }
  uint8_t* data() { return data_; }

  template <typename T>
  T* data() const {
    return (T*)data_;
  }

  template <typename T>
  T* data() {
    return (T*)data_;
  }

  size_t size() const { return size_; }

  void set(uint8_t* data, size_t size) {
    data_ = data;
    size_ = size;
  }

  void setPtr(uint8_t* data) { data_ = data; }

  friend std::ostream& operator<<(std::ostream& out, const MemoryPiece mp) {
    out << "MemoryPiece - ptr: " << std::hex << (size_t)mp.data() << std::dec
        << " size: " << mp.size();
    return out;
  }

};
}  // namespace marian