๐Ÿ”™ Back to Top

Fri Oct 24 02:07:51 JST 2014

In c++ addon (ใ‚ขใƒ‰ใ‚ชใƒณ) on node.js, processing the utf8 (or unicode?) string

ๆฅตๅฐๅ…ฑ้€šๆฑŽๅŒ–ใ‚’่งฃใๅฟ…่ฆใŒใ‚ใฃใฆ, ๆœ€้•ทๅ…ฑ้€š้ƒจๅˆ†ๆ–‡ๅญ—ๅˆ—ใฎใ‚ใฎ, O(mn)ใงใ‚„ใ‚‹DPใจๅ…จใๅŒๆง˜ใซ่งฃใ‘ใŸ. ใ“ใ‚ŒใŒใ‚ใฃใกใ‚ƒ้…ใใฃใฆ, C++ใงๆ›ธใ็›ดใ—ใฆใŸ.

ใง, nodeใŒๆ‰ฑใ†ๆ–‡ๅญ—ๅˆ—ใฏ็„กๆกไปถใงutf-8 ใงใ‚ใ‚‹. c++ใฎๅ†…้ƒจใงใ‚‚, ใใ‚Œใ‚’ใใฎใ‚ˆใ†ใซๆ‰ฑใ†ๅฟ…่ฆใŒใ‚ใ‚‹.

ใพใฃใŸใใ€APIใฎๅๅ‰ใŒ็ด›ใ‚‰ใ‚ใ—ใ„ใ€‚ Write ใจใ„ใ†ๅๅ‰ใ‚‚ใ€WriteUtf8 ใจใ„ใ†ๅๅ‰ใ‚‚ใ€‚

ไปŠๅ›žใ€็งใŒๆ–ฐใ—ใๅญฆใ‚“ใ APIใซใคใ„ใฆใฎใฟๆ›ธใใ€‚

ๅž‹ใƒใ‚งใƒƒใ‚ฏ

v8::Value::IsString()

// Arguments& args
args[0]->IsString();

v8::String ใธใฎใ‚ญใƒฃใ‚นใƒˆ (Object#toString)

v8::Value::ToString()

// Arguments& args
Local<String> str = args[0]->ToString();

ๆ–‡ๅญ—ๅˆ—้•ทใ•ใฎๅ–ๅพ— (String#length)

v8::Value::Length()

// Arguments& args
int n = args[0]->Length();

ๅค‰ๆ›ใ‚’ใ™ใ‚‹ๅ‰ใซใ€ String#length ใง้•ทใ•ใ‚’ๅ–ๅพ—ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ€‚

c++ ใƒ—ใƒชใƒŸใƒ†ใ‚ฃใƒ–ๅž‹ใธใฎใ‚ญใƒฃใ‚นใƒˆ

// Local<String> str
int n = str->Length();
uint16_t s[n];
str->Write(s);

Write ใฏใ„ใ‚ใ‚†ใ‚‹ sprinf ใงใ‚ใ‚‹ใ€‚ ใพใŸใ€WriteAscii ใจใ€ WriteUtf8 ใ‚‚ใ‚ใ‚‹ใŒใ€ ไปŠใฏไฝฟใ„ใฉใใงใฏใชใ„ใ€‚

c++ ใƒ—ใƒชใƒŸใƒ†ใ‚ฃใƒ–ๅž‹ใ‹ใ‚‰ javascript ๆ–‡ๅญ—ๅˆ—ใธใฎใ‚ญใƒฃใ‚นใƒˆ

uint16_t s[14];
// assign into s[0] to s[12]
s[13] = 0; // last must be '\n'
Local<String> str = String::New(us));