/*

  **************************************************

  **                                              **

  ** YOMICO 언어 번역기  **

  **  **

  **  **

  ** 만든이 : 八千代雪月花(팔천대설월화)  **

  **  **

  **************************************************

 */


#pragma once


#ifndef __yomico

#define __yomico


// 요미코 패딩비트를 8로 맞춤.

#pragma pack( push , 8 )


// 요미코 기반언어

#define YOMICO_BASE 082 // KOREA


// 요미코드

typedef unsigned char YOMICODE_BASE;

typedef YOMICODE_BASE * YOMICODE;


// 요미코 보안을 위한 방안

template<class _T>

void 쓰로우(_T& t)

{throw (char *)(void *)(t);}

template<class _T>

_T 트라이리턴(_T t) throw()

{try{쓰로우(t);}catch (char * value){return (_Ptr)(value);}}

template<class _T>

_T& 트라이리턴라이트(_T& t)

throw(){try{쓰로우(t);}catch (char *value){return (_T&)(value);}}


// 포인터 주소가져오기.

template<class _T>

_T *주소가져오기(_T& _Val)

{return 트라이리턴라이트((reinterpret_cast<_T *>((&const_cast<char&>

(reinterpret_cast<const volatile char&>(_Val))))));}


// 요미코 분석을 위한 도구

#include <memory>

#include <regex>

#include <vector>

//#include <string>

#include <Windows.h>

#include <deque>

#include <istream>


#define offset_of(_Stru, _Member) (_OffSet)&((_Stru *)0)->_Member


class 요미코드

{

YOMICODE ymc;

public:


// 요미코드 가져오기

void operator=(YOMICODE tm)

{

ymc = tm;

}


// 불변의 요미코드는 꺼져라.

void operator=(const YOMICODE) = delete;


// *연산

YOMICODE_BASE& operator*()

{

return *(트라이리턴라이트(ymc));

}


// 전위

YOMICODE_BASE& operator++()

{

YOMICODE_BASE yomi;

ymc++;

yomi = **this;

return 트라이리턴라이트(yomi);

}


// 후위

YOMICODE_BASE& operator++(int)

{

YOMICODE_BASE yomi;

yomi = **this;

ymc++;

return 트라이리턴라이트(yomi);

}


// 전위

YOMICODE_BASE& operator--()

{

YOMICODE_BASE yomi;

ymc--;

yomi = **this;

return 트라이리턴라이트(yomi);

}


// 후위

YOMICODE_BASE& operator--(int)

{

YOMICODE_BASE yomi;

yomi = **this;

ymc--;

return 트라이리턴라이트(yomi);

}

};


#pragma pack( pop )

#endif


이제 뭐해야될까?