STLPort팀에 패치를 보내다.

일하는 중간에 컴파일러를 Microsoft Visual C++ Compiler에서 Intel C++ Compiler로 바꿔보면 어떨까라는 생각이 문득 들기에..

삽질을 해버렸습니다. 므흣.

먼저 stlport 4.6.2로 삽질을 했는데, 하다보니 어차피 5.0으로 옮길거 귀찮기도 하고 해서 stlport 5.0.1로 버젼을 바꾸고 빌드 시도.

boost에서 std::type_info를 못찾는다고 징징거리고, new.h를 인클루드 할 수 없다고 배째기에 코드를 곰곰히쳐다보았더랍니다.

문제는 Intel C++ Compiler가 MSVC 호환모드로 작동할때에는 Intel용 컴파일과 다른 식의 설정적용이 되어야 하는데 그게 안되어 있더군요. 훗. MSVC 호환모드면서 Intel C++ Compiler라면 처리를 다르게 해주어야 하는데 말이죠..

그래서 #if 문에 몇가지 조건문을 넣어주니 완벽하게 작동. 눈물을 흘리면서, 기뻐했더랍니다. 하하.

내친김에 WinMerge로 패치파일 만들어서 stlport팀에 보내주었더니 1시간 좀 지나서 바로 적용해주네요. 아이 기분 좋아라. >.<b

5.0.2에는 단 2줄이지만 까막군의 수정사항도 반영될듯. 에헤.

Element+

회사 일로 Xerces C++을 사용하는 중입니다만.. boost와 STL에 찌든 저에게 저런 네이밍은 마음에 안듭니다. 사용법도 복잡하구요.. -_-;

대체물을 물색하다가 libxml2가 떠오르더군요. 지금 이 블로그에서 XML/XSLT 처리기로 사용하고 있는 것이 libxml2/libxslt의 python 바인딩이기도 하고 해서, 잠깐 고려를 해보았습니다. C더군요.. OTL..

Xerces C++을 변경해서 새로운 C++ wrapper를 만들어볼까 했지만, 그다지 마음에 들지도 않고.. 오히려 libxml2가 xpath같은 걸 쉽게 쓸 수 있기도 하고 해서 C++ Wrapper를 만들어보자! 라는 생각이 들었습니다. 몇가지 실험을 해본 결과 만족스럽더군요. operator[ ]를 오버로딩해서 xpath expression을 node에서 바로 쓸 수 있게도 해보고, child를 iterator로 사용할 수 있게도 해보고, iterator도 element만 돌기, text만 돌기 같은 것도 만들어 보구요. 🙂

해서 이름을 붙이려고 하는데, libxml++은 이미 있더군요. (역시나 사용하는 스타일은 매우 마음에 안듭니다.)

사실 libxml2에 있는 기능을 모두 지원할 생각도 없고, xpath를 위주로 한 라이브러리가 될 것 같다는 생각에, Element+라는 이름을 지어보았습니다. 헤헤.

쉬운게 좋은거죠. 히힛.

다만, xpath에 의해 평가된 결과물을 더 쉽게 접근할 수 있는 방법은 좀 더 고민해봐야 할 것 같다는..

목표는 이런거죠 뭐.

element_plus::document doc = element_plus::parse(“test.xml”);
element_plus::xpath_result res = doc.eval(“//text()”);
std::for_each(res.begin(), res.end(), std::ptr_fun(print_text_node));

smart tag 처리기가 [ ]를 지원못해서 어쩔수 없이 eval로… ㅡㅜ

요런 스타일로 쓰게 해주는. 헤헤.

이름도 지어놨고, 만드는 일만 남았네요. 아자!