본문 바로가기

프로그래밍

(38)
luaL_renewtable() - 테이블 복제 가끔 lua 스크립터를 사용할때 table을 복제할 필요가 있다. 이때 사용하면 좋은 방법을 소개한다. // ti: 복제한 table이 위치한 stack 위치 int luaL_renewtable( lua_State *L, int ti) { lua_newtable( L); { int ni = lua_gettop( L); for ( lua_pushnil( L); lua_next( L, ti); lua_pop( L, 1)) { lua_pushvalue( L, -2); { /* key */ switch (lua_type( L, -2)) { default : lua_pushvalue( L, -2); break; /* value */ case LUA_TTABLE: luaL_renewtable( L, lua_gett..
Java에서 한글(EUC-KR 또는 UTF-8)을 자동 판단 하는 방법~ 웹과 같은 환경에서 외부로 부터 전달받은 한글문자열이 EUC-KR인지 UTF-8인지 판단이 필요할때 사용될수 있는 소스 입니다. 해당 소스는 자동으로 LocalString으로 변경해 줍니다. public static String LocalString( String val) { if (val == null) return null; else { byte[] b; try { b = val.getBytes("8859_1"); CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder(); try { CharBuffer r = decoder.decode( ByteBuffer.wrap( b)); return r.toString(); } catch (Character..
javax.swing의 HTMLEditorKit를 사용한 HTML 파싱~ Java로 HTML를 파싱해야 할때가 가끔 존재한다. 이럴때 사용하면 유용한 소스를 소개한다. 해당 소스는 SWING에 포함되어 있으며, 여타 공개된 파서 이상의 기능을 제공한다. final StringBuffer plain = new StringBuffer(); HTMLEditorKit.Parser parser; parser = new ParserDelegator(); try { parser.parse( new StringReader( stringData), new HTMLEditorKit.ParserCallback() { public void handleText(char[] data, int pos) { // Text가 존재할때 호출된다. plain.append( data); plain.append(..
Windows플랫폼에서 사용가능한 Minidump Windows 플랫폼에서 개발된 프로그램에 문제가 발생되었을때 어떻게 할까? UNIX(Linux) 에서는 core 파일이 생성되어 debug에 사용될수 있다. 그런데, Windows에서는 상대적으로 이런 부분에 대해서는 별도의 제어가 필요하다. 다음의 코드는 Exception이 발생되었을때 간단히 사용할수 있는 Source이다. #include #include #include #include /////////////////////////////////////////////////////////////////////////////// // Minidump creation function // typedef BOOL (WINAPI *MINIDUMPWRITEDUMP)( HANDLE hProcess, DWORD..
리눅스 - 동적라이브러리를 독립 메모리 공간에 적재하기 리눅스는 동적라이브러리(.so)를 메모리에 적재하는 API를 제공한다. void * dlopen(const char *pathname, int mode); void * dlmopen(Lmid_t lmid, const char *pathname, int mode); 해당 함수는 윈도우의 DLL과 같은 동적 라이브러리를 loading 하는 용도로 사용되어 진다. 이 방법은 다음과 같은 경우에 사용되어 질때 매우 유용하다. - 싱글 CPU기반으로 개발된 엔진(전역 변수가 많다.. ㅠ.ㅠ) : 쓰레드에 사용가능한 구조가 아닌 경우에 사용할때 유용하다. 그러나, 단점은 기존의 동적 로딩 방식에 비해 메모리 사용이 두배라는 점이다. void * dlmopen( LM_ID_NEWLM, const char *pathn..
Coroutine Windows기반의 개발자라면 Fiber라고 이해하면 된다. 개발의 난이도가 증가하면서 여러 개의 진입점이 있는 함수의 필요성을 느끼게 된다. (간략히 말하자면 내가 제어 할 수 있는 Thread를 원하게 된다.) 그러나 일반적인 Thread는 개발자가 직접제어 하기에는 한계가 있다. 물론, 불가능 하다는 것은 아니다. 실제로 Thread를 개발자가 직접 제어하려는 순간 개발자의 의도와 상관없이 이미 제어권은 다른 곳으로 넘어가 버린다. 이러한 프로그램을 원하는 개발자를 위해 Coroutine을 제안한다. 나는 가끔 Windows 개발자는 축복받은 개발자가 아닌가 생각 한다. UNIX(Linux) 개발자는 대부분 직접 만들거나 인터넷을 뒤져서 찾아야 한다. 그러나, Windows 기반으로 개발을 하다 보..