본문
OMNeT++에서 package.ned란?
OMNeT++ 4.x에서는 자바에서와 유사한, 패키지 시스템을 가지고 있다.만약 NED 파일이 다양한 하부디렉토리에 존재하는 경우, 이 하부 디렉토리들은 패키지를 의미하고, 따라서 NED 파일은 패키지 선언과 import 설정이 되어있어야 한다. 이 작업은 IDE상에서 자동으로 수행된다. 프로젝트를 생성하고, 이를 IDE에서 프로젝트를 연다(open: 이클립스에서의 close project와 반대개념). Project -> Clean up NED files... 상단메뉴를 클릭한 후 프로젝트를 선택하고 OK를 누른다. IDE는 모든 패키지 선언과 import 설정을 고칠것이다(fix)
만약 모델을 다른사람들에게 배포하고자 한다면, root package를 정의해야 한다. 이 과정은 다른 모델과 이름이 충돌되는것을 방지한다. 이를 위해서, 최상위 NED 소스폴더(프로젝트의 Project Properties 다이얼로그상에서의 OMNeT++ -> NED Source Folders에서) 에 package.ned를 만든다. package.ned 파일에서의 패키지 정의는 해당 디렉토리와 그 하부디렉토리의 패키지를 정의한다. 예를 들어 파일의 내용이 다음과 같다면, NED 패키지는 org.myproject, org.myproject.subdir1, org.myproject.subdir2 가 될 것이다.
package org.myproject;
출처 : OMNeT++ Migration Guide Version 4.2.2
============================
실례로, queuenet의 package.ned 파일에는 다음과 같이 기재되어 있다. (@license 속성은 IDE에서 자동으로 생성되는 항목이며, 라이센스 정보를 담을/추가할 수 있다. )
package org.omnetpp.queueing;
@namespace(queueing); // C++ classes are in the 'queueing' namespace
@license(omnetpp); // this sample simulation is part of OMNeT++
위에서의 @namespace 속성으로 알 수 있듯, c++ 소스코드를 위한 네임스페이스를 지원한다. queuenet의 Merge.h에는 아래와 같이 기록되어 있다. 물론 다른 파일에서 Merge 모듈을 사용하기 위해서는 import org.omnetpp.queueing.Merge; 를 상단해 기재해 주면 된다.
#include "Merge.h"
namespace queueing {
Define_Module(Merge);
void Merge::handleMessage(cMessage *msg){
send(msg, "out");
}
}; //namespace
댓글