/***************************************************************************
                Cache create Control class
                -----------------------------------------
    begin      : 2010/03/31
    copyright  : (C) 2010 Solbox Inc.
    author     : storage dev team
    email      : storage.sd@solbox.com
    version    : 3.3

    CopyRight(C) 2010 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 __CACHE_CONTROL_H__
#define __CACHE_CONTROL_H__

#include <pthread.h>

#include "ProcessStatus.h"
#include "CacheData.h"
#include "CacheJobList.h"
#include "DataQueue.hpp"


// CCacheControl
// Cache Job List 의 정보를 바탕으로 실제 Cache 를 생성하는 Thread 를 
// 생성하는 역활을 수행,
// 전체적으로 Cache 생성 업무 Flow 를 제어한다.
// 내부적으로 Thread를 사용하고있다. 
class CCacheControl
{
    public:

        // 생성자
		CCacheControl( CProcessStatus* pProcessStatus, CCacheJobList* pJobList, CDataQueue<CCacheData>* pQueueCacheComplete );
		        
		// 소멸자
		~CCacheControl();
        
		// thread를 생성하여 Cache 생성 Thread 관련 작업을 수행.
		bool Start();
        
        
    private:
        
		// 프로세스 상의 Queue, Thread 상태를 관리하는 CProcessStatus 객체에 대한 포인터
		// - 생성자를 통해 전달받음        
		CProcessStatus * m_pProcessStatus;

		// Cache 생성 관련 Job List 객체에 대한 포인터
		// - 생성자를 통해 전달받음
		CCacheJobList* m_pCacheJob;

		// Cache 생성 완료 저장 Queue 에 대한 포인터
		// - 생성자를 통해 전달받음
		CDataQueue<CCacheData>* m_pQueueCacheComplete;
		
        
        // 쓰레드 핸들
        pthread_t m_threadHandle;

		// Thread Loop 마다 Sleep Time 정보를 저장하기 위한 변수
		unsigned int m_uSleep;
    

	private:

		// 스레드 함수
		static void* threadFunc( void* arg );

		// 스레드 내에서 각 loop 단위 처리 호출 함수.
		void Execute();
		

		// 스레드 내에서 각 loop 단위 처리 호출 함수.
		// return true  : 처리할 Data 가 계속 존재하는 경우...
		//        false : 처리할 Data 가 없어 idle 한 경우.
		bool MakeCache();

};

#endif //__CACHE_CONTROL_H__
