/***************************************************************************
                   Shared Memory (using ARP) Class Header ( SharedMemAPR.h )
                -----------------------------------------

	begin      : 2015/03/18
	copyright  : (C) 2013 Solbox Inc.
	author     : Development 1 Team
					- 2015/03/18 - 1st dadamin
	email      : dev1@solbox.com
	version    : 3.5.0

	CopyRight(C) 2005 Solbox Inc. All Rights reserved.
	Redistribution and use in source and binary forms, with or with out
	modification, are not permitted in outside of Solbox Inc.
***************************************************************************/
#ifndef __SHARED_MEMORY_WITH_APR_H__
#define __SHARED_MEMORY_WITH_APR_H__

#include <string>
#include <iostream>
#include <sstream>

#include "apr_errno.h"
#include "apr_general.h"
#include "apr_lib.h"
#include "apr_strings.h"
#include "apr_thread_proc.h"
#include "apr_time.h"
#include "apr_pools.h"
#include "apr_shm.h"
#include "apr.h"

using namespace std;

class CSharedMem
{
public:
	CSharedMem();
	~CSharedMem();
	
	// 공유메모리 생성
	//  새롭게 생성하며,  데이터 초기화
	//  filename 존재 : 자동 attach되며, 데이터 초기화 하지 않음
	bool Create(const char *filename, int allocSize, apr_pool_t *pool);

	// 존재하는 공유 메모리로 attach
	//  데이터 초기화 하지 않음
	bool Attach(const char *filename, int allocSize, apr_pool_t *pool);
	// 공유 메모리로 detach
	void Detach();

	// 공유 메모리 해제(자동 삭제됨)
	void Destroy();
	
	// 공유 메모리 할당된 size
	int GetSize();
	// 공유 메모리 포인터
	inline void* GetData() { return m_mem; }
	// 할당된 사이즈와 비교 
	bool EqualAllocSize(int allocSize);

	// 데이터 초기화
	void Clear();

private:
	bool Attach(const char *filename, int allocSize, apr_pool_t *pool, bool outlog);

private:
	bool		is_attach;
	
	void		*m_mem;
	apr_shm_t	*m_shm;
	apr_pool_t	*m_pool;
	string		m_shm_key;
};

#endif // __SHARED_MEMORY_WITH_APR_H__

