KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > quercus > env > Var


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  *
23  * Free Software Foundation, Inc.
24  * 59 Temple Place, Suite 330
25  * Boston, MA 02111-1307 USA
26  *
27  * @author Scott Ferguson
28  */

29
30 package com.caucho.quercus.env;
31
32 import com.caucho.quercus.expr.Expr;
33 import com.caucho.quercus.program.AbstractFunction;
34 import com.caucho.vfs.WriteStream;
35
36 import java.io.IOException JavaDoc;
37 import java.io.Serializable JavaDoc;
38 import java.util.Map JavaDoc;
39 import java.net.URL JavaDoc;
40 import java.util.Calendar JavaDoc;
41 import java.util.Collection JavaDoc;
42 import java.util.Date JavaDoc;
43 import java.util.IdentityHashMap JavaDoc;
44 import java.util.List JavaDoc;
45
46 /**
47  * Represents a PHP variable value.
48  */

49 public class Var extends Value
50   implements Serializable JavaDoc
51 {
52   Value _value;
53   private int _refCount;
54
55   public Var()
56   {
57     _value = NullValue.NULL;
58   }
59
60   public Var(Value value)
61   {
62     _value = value;
63   }
64
65   /**
66    * Adds a reference.
67    */

68   public void setReference()
69   {
70     _refCount = 1;
71   }
72
73   /**
74    * Sets as a global variable
75    */

76   public void setGlobal()
77   {
78     _refCount = 1;
79   }
80
81   /**
82    * Sets the value.
83    */

84   public Value set(Value value)
85   {
86     _value = value.toValue();
87
88     return _value;
89   }
90
91   /**
92    * Sets the value.
93    */

94   protected Value setRaw(Value value)
95   {
96     // quercus/0431
97
_value = value;
98
99     return _value;
100   }
101
102   /**
103    * Returns the type.
104    */

105   public String JavaDoc getType()
106   {
107     return _value.getType();
108   }
109
110   /**
111    * Returns true for a set type.
112    */

113   public boolean isset()
114   {
115     return _value.isset();
116   }
117
118   /**
119    * Returns true for an implementation of a class
120    */

121   public boolean isA(String JavaDoc name)
122   {
123     return _value.isA(name);
124   }
125
126   /**
127    * True for a number
128    */

129   public boolean isNull()
130   {
131     return _value.isNull();
132   }
133
134   /**
135    * True for a long
136    */

137   public boolean isLongConvertible()
138   {
139     return _value.isLongConvertible();
140   }
141
142   /**
143    * True to a double.
144    */

145   public boolean isDoubleConvertible()
146   {
147     return _value.isDoubleConvertible();
148   }
149
150   /**
151    * True for a number
152    */

153   public boolean isNumberConvertible()
154   {
155     return _value.isNumberConvertible();
156   }
157
158   /**
159    * Returns true for is_numeric
160    */

161   @Override JavaDoc
162   public boolean isNumeric()
163   {
164     return _value.isNumeric();
165   }
166
167   /**
168    * Returns true for a scalar
169    */

170   /*
171   public boolean isScalar()
172   {
173     return _value.isScalar();
174   }
175   */

176
177   /**
178    * Returns true for a StringValue.
179    */

180   public boolean isString()
181   {
182     return _value.isString();
183   }
184
185   /**
186    * Returns true for a BinaryValue.
187    */

188   public boolean isBinary()
189   {
190     return _value.isBinary();
191   }
192
193   /**
194    * Returns true for a UnicodeValue.
195    */

196   public boolean isUnicode()
197   {
198     return _value.isUnicode();
199   }
200
201   //
202
// Conversions
203
//
204

205   public String JavaDoc toString()
206   {
207     return _value.toString();
208   }
209
210   /**
211    * Converts to a boolean.
212    */

213   public boolean toBoolean()
214   {
215     return _value.toBoolean();
216   }
217
218   /**
219    * Converts to a long.
220    */

221   public long toLong()
222   {
223     return _value.toLong();
224   }
225
226   /**
227    * Converts to a double.
228    */

229   public double toDouble()
230   {
231     return _value.toDouble();
232   }
233
234   /**
235    * Converts to a long.
236    */

237   public Value toLongValue()
238   {
239     return _value.toLongValue();
240   }
241
242   /**
243    * Converts to a double.
244    */

245   public Value toDoubleValue()
246   {
247     return _value.toDoubleValue();
248   }
249
250   /**
251    * Converts to a string.
252    * @param env
253    */

254   public StringValue toString(Env env)
255   {
256     return _value.toString(env);
257   }
258
259   /**
260    * Converts to an object.
261    */

262   public Object JavaDoc toJavaObject()
263   {
264     return _value.toJavaObject();
265   }
266
267   /**
268    * Converts to an object.
269    */

270   @Override JavaDoc
271   public Object JavaDoc toJavaObject(Env env, Class JavaDoc type)
272   {
273     return _value.toJavaObject(env, type);
274   }
275
276   /**
277    * Converts to an object.
278    */

279   @Override JavaDoc
280   public Object JavaDoc toJavaObjectNotNull(Env env, Class JavaDoc type)
281   {
282     return _value.toJavaObjectNotNull(env, type);
283   }
284
285   /**
286    * Converts to a java Collection object.
287    */

288   public Collection JavaDoc toJavaCollection(Env env, Class JavaDoc type)
289   {
290     return _value.toJavaCollection(env, type);
291   }
292   
293   /**
294    * Converts to a java List object.
295    */

296   public List JavaDoc toJavaList(Env env, Class JavaDoc type)
297   {
298     return _value.toJavaList(env, type);
299   }
300
301   /**
302    * Converts to a java map.
303    */

304   public Map JavaDoc toJavaMap(Env env, Class JavaDoc type)
305   {
306     return _value.toJavaMap(env, type);
307   }
308
309   /**
310    * Converts to a Java Calendar.
311    */

312   @Override JavaDoc
313   public Calendar JavaDoc toJavaCalendar()
314   {
315     return _value.toJavaCalendar();
316   }
317   
318   /**
319    * Converts to a Java Date.
320    */

321   @Override JavaDoc
322   public Date JavaDoc toJavaDate()
323   {
324     return _value.toJavaDate();
325   }
326   
327   /**
328    * Converts to a Java URL.
329    */

330   @Override JavaDoc
331   public URL JavaDoc toJavaURL(Env env)
332   {
333     return _value.toJavaURL(env);
334   }
335
336   /**
337    * Converts to an array
338    */

339   public Value toArray()
340   {
341     return _value.toArray();
342   }
343
344   /**
345    * Converts to an array
346    */

347   @Override JavaDoc
348   public ArrayValue toArrayValue(Env env)
349   {
350     return _value.toArrayValue(env);
351   }
352
353   /**
354    * Converts to an array
355    */

356   public Value toAutoArray()
357   {
358     _value = _value.toAutoArray();
359     
360     return _value;
361   }
362
363   /**
364    * Converts to an object.
365    */

366   public Value toObject(Env env)
367   {
368     return _value.toObject(env);
369   }
370
371   /**
372    * Append to a string builder.
373    */

374   public void appendTo(StringBuilderValue sb)
375   {
376     _value.appendTo(sb);
377   }
378
379   /**
380    * Append to a string builder.
381    */

382   public void appendTo(BinaryBuilderValue sb)
383   {
384     _value.appendTo(sb);
385   }
386
387   /**
388    * Returns to the value value.
389    */

390   public final Value getRawValue()
391   {
392     return _value;
393   }
394
395   /**
396    * Converts to a raw value.
397    */

398   public Value toValue()
399   {
400     return _value;
401   }
402
403   /**
404    * Converts to a function argument value that is never assigned or modified.
405    */

406   @Override JavaDoc
407   public Value toArgValueReadOnly()
408   {
409     return _value;
410   }
411
412   /**
413    * Converts to a raw value.
414    */

415   @Override JavaDoc
416   public Value toArgValue()
417   {
418     return _value.toArgValue();
419   }
420
421   /**
422    * Converts to a function argument ref value, i.e. an argument
423    * declared as a reference, but not assigned
424    */

425   @Override JavaDoc
426   public Value toRefValue()
427   {
428     // php/344r
429
return _value.toRefValue();
430   }
431
432   /**
433    * Converts to a variable
434    */

435   @Override JavaDoc
436   public Var toVar()
437   {
438     // php/3d04
439
return new Var(_value.toArgValue());
440   }
441
442   /**
443    * Converts to a reference variable
444    */

445   public Var toRefVar()
446   {
447     _refCount = 2;
448
449     return this;
450   }
451
452   /**
453    * Converts to a key.
454    */

455   public Value toKey()
456   {
457     return _value.toKey();
458   }
459
460   @Override JavaDoc
461   public StringValue toStringValue()
462   {
463     return _value.toStringValue();
464   }
465
466   @Override JavaDoc
467   public BinaryValue toBinaryValue(Env env)
468   {
469     return _value.toBinaryValue(env);
470   }
471
472   @Override JavaDoc
473   public UnicodeValue toUnicodeValue(Env env)
474   {
475     return _value.toUnicodeValue(env);
476   }
477
478   @Override JavaDoc
479   public StringValue toStringBuilder()
480   {
481     return _value.toStringBuilder();
482   }
483
484   //
485
// Operations
486
//
487

488   /**
489    * Copy the value.
490    */

491   public Value copy()
492   {
493     // php/041d
494
return _value.copy();
495   }
496
497   /**
498    * Copy the value as an array item.
499    */

500   public Value copyArrayItem()
501   {
502     _refCount = 2;
503
504     // php/041d
505
return this;
506   }
507
508   /**
509    * Copy the value as a return value.
510    */

511   public Value copyReturn()
512   {
513     if (_refCount < 1)
514       return _value;
515     else
516       return _value.copy();
517   }
518
519   /**
520    * Converts to a variable reference (for function arguments)
521    */

522   public Value toRef()
523   {
524     _refCount = 2;
525
526     return new RefVar(this);
527   }
528
529   /**
530    * Returns true for an array.
531    */

532   public boolean isArray()
533   {
534     return _value.isArray();
535   }
536
537   /**
538    * Negates the value.
539    */

540   public Value neg()
541   {
542     return _value.neg();
543   }
544
545   /**
546    * Adds to the following value.
547    */

548   public Value add(Value rValue)
549   {
550     return _value.add(rValue);
551   }
552
553   /**
554    * Adds to the following value.
555    */

556   @Override JavaDoc
557   public Value add(long rValue)
558   {
559     return _value.add(rValue);
560   }
561
562   /**
563    * Pre-increment the following value.
564    */

565   public Value preincr(int incr)
566   {
567     _value = _value.preincr(incr);
568
569     return _value;
570   }
571
572   /**
573    * Post-increment the following value.
574    */

575   public Value postincr(int incr)
576   {
577     Value value = _value;
578
579     _value = value.postincr(incr);
580
581     return value;
582   }
583
584   /**
585    * Subtracts to the following value.
586    */

587   public Value sub(Value rValue)
588   {
589     return _value.sub(rValue);
590   }
591
592   /**
593    * Multiplies to the following value.
594    */

595   public Value mul(Value rValue)
596   {
597     return _value.mul(rValue);
598   }
599
600   /**
601    * Multiplies to the following value.
602    */

603   public Value mul(long lValue)
604   {
605     return _value.mul(lValue);
606   }
607
608   /**
609    * Divides the following value.
610    */

611   public Value div(Value rValue)
612   {
613     return _value.div(rValue);
614   }
615
616   /**
617    * Shifts left by the value.
618    */

619   public Value lshift(Value rValue)
620   {
621     return _value.lshift(rValue);
622   }
623
624   /**
625    * Shifts right by the value.
626    */

627   public Value rshift(Value rValue)
628   {
629     return _value.rshift(rValue);
630   }
631
632   /**
633    * Returns true for equality
634    */

635   public boolean eq(Value rValue)
636   {
637     return _value.eq(rValue);
638   }
639
640   /**
641    * Returns true for equality
642    */

643   public boolean eql(Value rValue)
644   {
645     return _value.eql(rValue);
646   }
647
648   /**
649    * Compares the two values
650    */

651   public int cmp(Value rValue)
652   {
653     return _value.cmp(rValue);
654   }
655
656   /**
657    * Returns the array/object size
658    */

659   public int getSize()
660   {
661     return _value.getSize();
662   }
663
664   /**
665    * Returns the field values.
666    */

667   public Collection JavaDoc<Value> getIndices()
668   {
669     return _value.getIndices();
670   }
671
672   /**
673    * Returns the array keys.
674    */

675   public Value []getKeyArray()
676   {
677     return _value.getKeyArray();
678   }
679
680   /**
681    * Returns the array values.
682    */

683   public Value []getValueArray(Env env)
684   {
685     return _value.getValueArray(env);
686   }
687
688   /**
689    * Returns the array ref.
690    */

691   public Value getArray()
692   {
693     if (! _value.isset())
694       _value = new ArrayValueImpl();
695
696     return _value;
697   }
698
699   /**
700    * Returns the value, creating an object if unset.
701    */

702   public Value getObject(Env env)
703   {
704     if (! _value.isset())
705       _value = env.createObject();
706
707     return _value;
708   }
709
710   /**
711    * Returns the array ref.
712    */

713   public Value get(Value index)
714   {
715     return _value.get(index);
716   }
717
718   /**
719    * Returns the array ref.
720    */

721   public Value getRef(Value index)
722   {
723     // php/3d1a
724
if (! _value.isset())
725       _value = new ArrayValueImpl();
726
727     return _value.getRef(index);
728   }
729
730   /**
731    * Returns the array ref.
732    */

733   public Value getArg(Value index)
734   {
735     if (_value.isset())
736       return _value.getArg(index);
737     else
738       return new ArgGetValue(this, index); // php/3d2p
739
}
740
741   /**
742    * Returns the array ref.
743    */

744   public Value getArgRef(Value index)
745   {
746     if (_value.isset())
747       return _value.getArgRef(index);
748     else
749       return new ArgGetValue(this, index);
750   }
751
752   /**
753    * Returns the value, creating an object if unset.
754    */

755   public Value getArray(Value index)
756   {
757     // php/3d11
758
_value = _value.toAutoArray();
759
760     return _value.getArray(index);
761   }
762
763   /**
764    * Returns the value, doing a copy-on-write if needed.
765    */

766   public Value getDirty(Value index)
767   {
768     return _value.getDirty(index);
769   }
770
771   /**
772    * Returns the value, creating an object if unset.
773    */

774   public Value getObject(Env env, Value index)
775   {
776     // php/3d2p
777
_value = _value.toAutoArray();
778
779     return _value.getObject(env, index);
780   }
781
782   /**
783    * Returns the array ref.
784    */

785   public Value put(Value index, Value value)
786   {
787     _value = _value.toAutoArray();
788     
789     return _value.put(index, value);
790   }
791
792   /**
793    * Returns the array ref.
794    */

795   public Value put(Value value)
796   {
797     _value = _value.toAutoArray();
798     
799     return _value.put(value);
800   }
801
802   /**
803    * Returns the array ref.
804    */

805   public Value putRef()
806   {
807     _value = _value.toAutoArray();
808     
809     return _value.putRef();
810   }
811
812   /**
813    * Return unset the value.
814    */

815   public Value remove(Value index)
816   {
817     return _value.remove(index);
818   }
819
820   /**
821    * Returns the field ref.
822    */

823   @Override JavaDoc
824   public Value getField(Env env, String JavaDoc index)
825   {
826     return _value.getField(env, index);
827   }
828
829   /**
830    * Returns the field ref.
831    */

832   public Value getFieldRef(Env env, String JavaDoc index)
833   {
834     // php/3a0r
835
_value = _value.toAutoObject(env);
836     
837     return _value.getFieldRef(env, index);
838   }
839
840   /**
841    * Returns the array ref.
842    */

843   public Value getFieldArg(Env env, String JavaDoc index)
844   {
845     if (_value.isset())
846       return _value.getFieldArg(env, index);
847     else
848       return new ArgGetFieldValue(env, this, index);
849   }
850
851   /**
852    * Returns the field value as an array
853    */

854   public Value getFieldArray(Env env, String JavaDoc index)
855   {
856     // php/3d1q
857
_value = _value.toAutoObject(env);
858     
859     return _value.getFieldArray(env, index);
860   }
861
862   /**
863    * Returns the field value as an object
864    */

865   public Value getFieldObject(Env env, String JavaDoc index)
866   {
867     _value = _value.toAutoObject(env);
868     
869     return _value.getFieldObject(env, index);
870   }
871
872   /**
873    * Sets the field.
874    */

875   public Value putField(Env env, String JavaDoc index, Value value)
876   {
877     // php/3a0s
878
_value = _value.toAutoObject(env);
879
880     return _value.putField(env, index, value);
881   }
882
883   /**
884    * Unsets the field.
885    */

886   public void removeField(String JavaDoc index)
887   {
888     _value.removeField(index);
889   }
890
891   /**
892    * Returns the character at an index
893    */

894   @Override JavaDoc
895   public Value charValueAt(long index)
896   {
897     return _value.charValueAt(index);
898   }
899
900   /**
901    * Sets the character at an index
902    */

903   @Override JavaDoc
904   public Value setCharValueAt(long index, String JavaDoc value)
905   {
906     return _value.setCharValueAt(index, value);
907   }
908
909   /**
910    * Returns true if there are more elements.
911    */

912   public boolean hasCurrent()
913   {
914     return _value.hasCurrent();
915   }
916
917   /**
918    * Returns the current key
919    */

920   public Value key()
921   {
922     return _value.key();
923   }
924
925   /**
926    * Returns the current value
927    */

928   public Value current()
929   {
930     return _value.current();
931   }
932
933   /**
934    * Returns the current value
935    */

936   public Value next()
937   {
938     return _value.next();
939   }
940
941   /**
942    * Evaluates a method.
943    */

944   public Value callMethod(Env env, String JavaDoc methodName, Expr []args)
945   {
946     return _value.callMethod(env, methodName, args);
947   }
948
949   /**
950    * Evaluates a method.
951    */

952   public Value callMethod(Env env, String JavaDoc methodName, Value []args)
953   {
954     return _value.callMethod(env, methodName, args);
955   }
956
957   /**
958    * Evaluates a method.
959    */

960   public Value callMethod(Env env, String JavaDoc methodName)
961   {
962     return _value.callMethod(env, methodName);
963   }
964
965   /**
966    * Evaluates a method.
967    */

968   public Value callMethod(Env env, String JavaDoc methodName, Value a0)
969   {
970     return _value.callMethod(env, methodName, a0);
971   }
972
973   /**
974    * Evaluates a method.
975    */

976   public Value callMethod(Env env, String JavaDoc methodName, Value a0, Value a1)
977   {
978     return _value.callMethod(env, methodName, a0, a1);
979   }
980
981   /**
982    * Evaluates a method with 3 args.
983    */

984   public Value callMethod(Env env, String JavaDoc methodName,
985               Value a0, Value a1, Value a2)
986   {
987     return _value.callMethod(env, methodName, a0, a1, a2);
988   }
989
990   /**
991    * Evaluates a method with 4 args.
992    */

993   public Value callMethod(Env env, String JavaDoc methodName,
994               Value a0, Value a1, Value a2, Value a3)
995   {
996     return _value.callMethod(env, methodName, a0, a1, a2, a3);
997   }
998
999   /**
1000   * Evaluates a method with 5 args.
1001   */

1002  public Value callMethod(Env env, String JavaDoc methodName,
1003              Value a0, Value a1, Value a2, Value a3, Value a4)
1004  {
1005    return _value.callMethod(env, methodName, a0, a1, a2, a3, a4);
1006  }
1007
1008  /**
1009   * Evaluates a method.
1010   */

1011  public Value callMethodRef(Env env, String JavaDoc methodName, Expr []args)
1012  {
1013    return _value.callMethodRef(env, methodName, args);
1014  }
1015
1016  /**
1017   * Evaluates a method.
1018   */

1019  public Value callMethodRef(Env env, String JavaDoc methodName, Value []args)
1020  {
1021    return _value.callMethodRef(env, methodName, args);
1022  }
1023
1024  /**
1025   * Evaluates a method.
1026   */

1027  public Value callMethodRef(Env env, String JavaDoc methodName)
1028  {
1029    return _value.callMethodRef(env, methodName);
1030  }
1031
1032  /**
1033   * Evaluates a method.
1034   */

1035  public Value callMethodRef(Env env, String JavaDoc methodName, Value a0)
1036  {
1037    return _value.callMethodRef(env, methodName, a0);
1038  }
1039
1040  /**
1041   * Evaluates a method.
1042   */

1043  public Value callMethodRef(Env env, String JavaDoc methodName, Value a0, Value a1)
1044  {
1045    return _value.callMethodRef(env, methodName, a0, a1);
1046  }
1047
1048  /**
1049   * Evaluates a method with 3 args.
1050   */

1051  public Value callMethodRef(Env env, String JavaDoc methodName,
1052              Value a0, Value a1, Value a2)
1053  {
1054    return _value.callMethodRef(env, methodName, a0, a1, a2);
1055  }
1056
1057  /**
1058   * Evaluates a method with 4 args.
1059   */

1060  public Value callMethodRef(Env env, String JavaDoc methodName,
1061              Value a0, Value a1, Value a2, Value a3)
1062  {
1063    return _value.callMethodRef(env, methodName, a0, a1, a2, a3);
1064  }
1065
1066  /**
1067   * Evaluates a method with 5 args.
1068   */

1069  public Value callMethodRef(Env env, String JavaDoc methodName,
1070              Value a0, Value a1, Value a2, Value a3, Value a4)
1071  {
1072    return _value.callMethodRef(env, methodName, a0, a1, a2, a3, a4);
1073  }
1074
1075  /**
1076   * Evaluates a method.
1077   */

1078  public Value callClassMethod(Env env, AbstractFunction fun, Value []args)
1079  {
1080    return _value.callClassMethod(env, fun, args);
1081  }
1082
1083  /**
1084   * Prints the value.
1085   * @param env
1086   */

1087  public void print(Env env)
1088  {
1089    _value.print(env);
1090  }
1091
1092  /**
1093   * Serializes the value.
1094   */

1095  public void serialize(StringBuilder JavaDoc sb)
1096  {
1097    _value.serialize(sb);
1098  }
1099
1100  public void varDumpImpl(Env env,
1101                          WriteStream out,
1102                          int depth,
1103                          IdentityHashMap JavaDoc<Value, String JavaDoc> valueSet)
1104    throws IOException JavaDoc
1105  {
1106    out.print("&");
1107    _value.varDump(env, out, depth, valueSet);
1108  }
1109  
1110  //
1111
// Java Serialization
1112
//
1113

1114  public Object JavaDoc writeReplace()
1115  {
1116    return _value;
1117  }
1118}
1119
1120
Popular Tags