謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

多段replaceの文字列mixinを使った高速化(2)

まず雛形とテストケースを作ります。名前はreplace.dとします。コンパイル及び実行はrdmd -unittest replace.dで行います。ちなみにこのテストケースはまだ抜けが多いということを覚えておいてください。

module replace;
import std.stdio;

/*
 * multiReplace関数のコードを生成します。
 */
private string genMultiReplaceCode(string name, string[] repstrs){
  return "return \"\";";
}


/**
 * 複数の組を置換します。
 * sをrepstrsの奇数の要素の値からその直後の要素の値に置き換えます。
 */
string multiReplace(repstrs...)(string s){
  mixin(genMultiReplaceCode(s.stringof, [repstrs]));
}

unittest{
  assert(multiReplace!("a","b","c","d")("a") == "b");
  assert(multiReplace!("a","b","c","d")("b") == "b");
  assert(multiReplace!("a","b","c","d")("c") == "d");
  assert(multiReplace!("a","b","c","d")("d") == "d");
  assert(multiReplace!("a","aa")("aa") == "aaaa");
  assert(multiReplace!("aa","a")("aaaa") == "aa");
  assert(multiReplace!("aa","aaa")("aaaa") == "aaaaaa");
  assert(multiReplace!("aaa","aa")("aaaaaa") == "aaaa");
  assert(multiReplace!("a","a")("a") == "a");
}

void main(){
}