Skip to content

Instantly share code, notes, and snippets.

@pjc0247
Last active June 9, 2016 14:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pjc0247/bed27d79baca16f233c322adaa78c511 to your computer and use it in GitHub Desktop.
Save pjc0247/bed27d79baca16f233c322adaa78c511 to your computer and use it in GitHub Desktop.
// totest.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
#include <string>
constexpr unsigned short _make_16(unsigned char a, unsigned char b) {
return ((unsigned short)((a & 0xff) | ((b & 0xff) << 8)));
}
constexpr unsigned char _lo_8(unsigned short a) {
return ((unsigned char)(a & 0xff));
}
constexpr unsigned char _hi_8(unsigned short a) {
return ((unsigned char)(a >> 8) & 0xff);
}
template <size_t I, size_t OFFSET>
struct tokenizer {
constexpr static int find(int target, const char a[]) {
return
a[I] == ',' ?
target == 0 ?
_make_16(I + 1, OFFSET - I) :
tokenizer<I - 1, I - 1>::find(target - 1, a)
:
tokenizer<I - 1, OFFSET>::find(target, a);
}
};
template <size_t OFFSET>
struct tokenizer<0, OFFSET> {
constexpr static int find(int target, const char a[]) {
return _make_16(0, OFFSET + 1);
}
};
template <size_t SIZE>
inline std::string nth_token(int target, const char(&a)[SIZE]) {
int ret = tokenizer<SIZE - 2, SIZE - 2>::find(target, a);
return std::string(a + _lo_8(ret), _hi_8(ret));
}
int main()
{
int a = 5;
printf("%s\n", nth_token(1, "AB,CD").c_str());
printf("%d\n", foo(&a));
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment