No Description

TestApp1.cpp 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // TestApp1.cpp : Defines the entry point for the application.
  2. //
  3. #ifdef _WIN32
  4. #include "Win32/stdafx.h"
  5. #endif
  6. #include <DK.h>
  7. void PrintVariant(const DKString& name, const DKVariant& var, int indent = 0)
  8. {
  9. char ind[1024];
  10. {
  11. int i = 0;
  12. while (i < indent)
  13. {
  14. ind[i++] = ' ';
  15. }
  16. ind[i] = 0;
  17. }
  18. switch (var.ValueType())
  19. {
  20. case DKVariant::TypeUndefined:
  21. DKLog("%s \"%ls\" (Undefined)", ind, (const wchar_t*)name);
  22. break;
  23. case DKVariant::TypeInteger:
  24. DKLog("%s \"%ls\" (Integer) : %lld", ind, (const wchar_t*)name, var.Integer());
  25. break;
  26. case DKVariant::TypeFloat:
  27. DKLog("%s \"%ls\" (Float) : %f", ind, (const wchar_t*)name, var.Float());
  28. break;
  29. case DKVariant::TypeVector2:
  30. DKLog("%s \"%ls\" (Vector2)", ind, (const wchar_t*)name);
  31. break;
  32. case DKVariant::TypeVector3:
  33. DKLog("%s \"%ls\" (Vector3)", ind, (const wchar_t*)name);
  34. break;
  35. case DKVariant::TypeVector4:
  36. DKLog("%s \"%ls\" (Vector4)", ind, (const wchar_t*)name);
  37. break;
  38. case DKVariant::TypeMatrix2:
  39. DKLog("%s \"%ls\" (Matrix2x2)", ind, (const wchar_t*)name);
  40. break;
  41. case DKVariant::TypeMatrix3:
  42. DKLog("%s \"%ls\" (Matrix3x3)", ind, (const wchar_t*)name);
  43. break;
  44. case DKVariant::TypeMatrix4:
  45. DKLog("%s \"%ls\" (Matrix4x4)", ind, (const wchar_t*)name);
  46. break;
  47. case DKVariant::TypeQuaternion:
  48. DKLog("%s \"%ls\" (Quat)", ind, (const wchar_t*)name);
  49. break;
  50. case DKVariant::TypeRational:
  51. DKLog("%s \"%ls\" (Rational) %lld / %lld", ind, (const wchar_t*)name, var.Rational().Numerator(), var.Rational().Denominator());
  52. break;
  53. case DKVariant::TypeString:
  54. DKLog("%s \"%ls\" (String) : %ls", ind, (const wchar_t*)name, (const wchar_t*)var.String());
  55. break;
  56. case DKVariant::TypeDateTime:
  57. DKLog("%s \"%ls\" (DateTime)", ind, (const wchar_t*)name);
  58. break;
  59. case DKVariant::TypeData:
  60. DKLog("%s \"%ls\" (Data)", ind, (const wchar_t*)name);
  61. break;
  62. case DKVariant::TypeStructData:
  63. DKLog("%s \"%ls\" (StructData)", ind, (const wchar_t*)name);
  64. break;
  65. case DKVariant::TypeArray:
  66. DKLog("%s \"%ls\" (Array)", ind, (const wchar_t*)name);
  67. for (int i = 0; i < var.Array().Count(); ++i)
  68. {
  69. const DKVariant& sub = var.Array().Value(i);
  70. PrintVariant(DKString::Format("%ls[%d]", name, i), sub, indent + 4);
  71. }
  72. break;
  73. case DKVariant::TypePairs:
  74. DKLog("%s \"%ls\" (Pairs)", ind, (const wchar_t*)name);
  75. var.Pairs().EnumerateForward([indent](const DKVariant::VPairs::Pair& pair)
  76. {
  77. PrintVariant(pair.key, pair.value, indent+4);
  78. });
  79. break;
  80. default:
  81. DKLog("%s %ls (Unknown)");
  82. break;
  83. }
  84. }
  85. #ifdef _WIN32
  86. int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  87. _In_opt_ HINSTANCE hPrevInstance,
  88. _In_ LPWSTR lpCmdLine,
  89. _In_ int nCmdShow)
  90. #else
  91. int main(int argc, const char * argv[])
  92. #endif
  93. {
  94. DKApplication app; // for DKLog to console
  95. DKVariant prop = DKVariant::TypePairs;
  96. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "1");
  97. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "2");
  98. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "3");
  99. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "4");
  100. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "5");
  101. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "6");
  102. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "7");
  103. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "8");
  104. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "9");
  105. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "10");
  106. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "11");
  107. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "12");
  108. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "13");
  109. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "14");
  110. prop.NewValueAtKeyPath("Root.Group1.Sub1.Container1.Item1", "15");
  111. PrintVariant("ROOT", prop);
  112. DKLog("-------------------");
  113. DKString findKey = "Root.Group1.Sub1.Container1.Item1";
  114. bool b = prop.FindObjectAtKeyPath(findKey, DKFunction([&](DKVariant& var)
  115. {
  116. PrintVariant(DKString::Format("(%ls)", (const wchar_t*)findKey), var);
  117. return false;
  118. }));
  119. DKLog("FindObjectAtKeyPath result: %d", (int)b);
  120. return 0;
  121. }