码迷,mamicode.com
首页 > 其他好文 > 详细

Variants

时间:2014-12-18 16:47:25      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   io   color   os   sp   for   on   

  1 ////Variants.cpp
  2 
  3 #include "vcf/FoundationKit/FoundationKit.h"
  4 #include "vcf/FoundationKit/Dictionary.h"
  5 using namespace VCF;
  6 
  7 
  8 
  9 
 10 void printVariant( VariantData& v )
 11 {
 12     System::print( Format("As string: {%s},  type: %d\n") % v.toString() % v.type);
 13 }
 14 
 15 void testConstructors()
 16 {
 17     VariantData v1("Hello");
 18     VCF_ASSERT( v1.type == pdString );
 19     printVariant(v1);
 20 
 21     VariantData v2(L"Hello");
 22     VCF_ASSERT( v2.type == pdString );
 23     printVariant(v2);
 24 
 25     VariantData v3(String("Hello"));
 26     VCF_ASSERT( v3.type == pdString );
 27     printVariant(v3);
 28 
 29     VariantData v4(10);
 30     VCF_ASSERT( v4.type == pdInt );
 31     printVariant(v4);
 32 
 33     VariantData v5((long)90005);
 34     VCF_ASSERT( v5.type == pdLong );
 35     printVariant(v5);
 36 
 37     VariantData v6(-9859405);
 38     VCF_ASSERT( v6.type == pdInt );
 39     printVariant(v6);
 40 
 41     VariantData v7 = (VCF::ushort)123;
 42     VCF_ASSERT( v7.type == pdUShort );
 43     printVariant(v7);
 44 
 45     VariantData v8 = (uint32)15997823;
 46     VCF_ASSERT( v8.type == pdUInt );
 47     printVariant(v8);
 48 
 49 
 50     VariantData v9 = 2332.003893112;
 51     VCF_ASSERT( v9.type == pdDouble );
 52     printVariant(v9);
 53 
 54     VariantData v10 = 1.0893112f;
 55     VCF_ASSERT( v10.type == pdFloat );
 56     printVariant(v10);
 57 
 58     
 59     VariantData v11 = true;
 60     VCF_ASSERT( v11.type == pdBool );
 61     printVariant(v11);
 62 
 63     VariantData v12 = (int64)8797852412;
 64     VCF_ASSERT( v12.type == pdInt64 );
 65     printVariant(v12);
 66 
 67     VariantData v13 = (uint64)8797852413;
 68     VCF_ASSERT( v13.type == pdUInt64 );
 69     printVariant(v13);
 70 
 71     VariantData v14 = DateTime::now();
 72     VCF_ASSERT( v14.type == pdDateTime );
 73     printVariant(v14);
 74 
 75     DateTime dt( 1998, 8, 1, 16, 30, 0 );
 76     VariantData v15 = DateTime::now() - dt;
 77     VCF_ASSERT( v15.type == pdDateTimeSpan );
 78     printVariant(v15);
 79 
 80     dt.setMilliseconds( 0 );
 81     VariantData v16 = dt;
 82     VCF_ASSERT( v16.type == pdDateTime );
 83     printVariant(v16);
 84 
 85 
 86 
 87     char tmp[256];
 88     void* tmpPtr = tmp;
 89 
 90     VariantData v17 = tmpPtr;
 91     VCF_ASSERT( v17.type == pdVoidPointer );
 92     
 93     String sp = v17.toString();
 94     v17.setFromString(sp);
 95 
 96 
 97     printVariant(v17);    
 98 }
 99 
100 
101 void testConversions() 
102 {
103     VariantData v1;
104     VariantData v2;
105 
106     v1 = "Stuff";
107     printVariant(v1);
108 
109     v1 = 1002;
110     printVariant(v1);
111 
112     v2 = v1;
113     printVariant(v2);
114 
115 
116     //note we don‘t support internal conversion from one
117     //type to another - v1 is an int, but won‘t *yet*
118     //convert automatically to a double.
119     //Should it?
120     double d = v1;
121 
122     //v2 now sees the gibberish double value
123     v2 = d;
124     printVariant(v2);
125 
126     d = 1001.223211;
127     v2 = d;
128     printVariant(v2);
129 
130     v1 = false;
131     printVariant(v1);
132 
133     //note what currently happens. 
134     //VariantData::setFromString expects the 
135     //string value to be in the same existing
136     //format as the variant is currently in.
137     //v1 is a currently holding a bool value type
138     //(pdBool), and the string that is returned
139     //from v2‘s call to toString() is that of 
140     //a double (pdDouble). So the boolean string
141     //parsing of a double string is nonsensical
142     try {
143         v1.setFromString( v2.toString() );
144     }
145     catch ( std::exception& e ) {
146         System::println( String("Error: \n") + e.what() );
147     }
148 
149     printVariant(v1);
150 }
151 
152 
153 void testCompares()
154 {
155     VariantData v1(true);
156     VariantData v2;
157 
158     v2 = true;
159     
160     VCF_ASSERT( v1 == v2 );
161 }
162 
163 int main( int argc, char** argv ){
164 
165     FoundationKit::init( argc, argv );
166     
167     try {
168         testConstructors();
169         System::println( "testConstructors completed OK." );
170 
171         testConversions();
172         System::println( "testConversions completed OK." );
173 
174         testCompares();
175         System::println( "testCompares completed OK." );
176 
177     }
178     catch ( BasicException& e ) {
179         System::println( String("Error: \n") + e.getMessage() );
180     }
181     catch ( std::exception& e ) {
182         System::println( String("Error: \n") + e.what() );
183     }
184 
185     FoundationKit::terminate();
186     return 0;
187 }

 

Variants

标签:style   blog   ar   io   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/elitiwin/p/4171847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!