00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef _RESULT_HPP
00015 #define _RESULT_HPP
00016
00017 #include <string>
00018 #include <xercesc/util/XercesDefs.hpp>
00019
00020 #include <xqilla/framework/XQillaExport.hpp>
00021 #include <xqilla/items/Item.hpp>
00022 #include <xqilla/runtime/ResultImpl.hpp>
00023 #include <xqilla/runtime/EmptyResult.hpp>
00024
00025 class Sequence;
00026 class SequenceType;
00027 class DynamicContext;
00028 class StaticType;
00029
00031 class XQILLA_API Result
00032 {
00033 public:
00034 Result(const Sequence &seq);
00035 Result(ResultImpl *impl);
00036 Result(const Result &o);
00037 Result &operator=(const Result &o);
00038 ~Result();
00039
00041 ResultImpl *operator->();
00042
00044 const ResultImpl *operator->() const;
00045
00047 ResultImpl *get();
00048
00050 const ResultImpl *get() const;
00051
00053 bool isNull() const;
00054
00055 EmptyResult* getEmpty() const;
00056
00057 private:
00058 ResultImpl *_impl;
00059
00060 static EmptyResult _empty;
00061 };
00062
00063 inline bool Result::isNull() const
00064 {
00065 return _impl == 0;
00066 }
00067
00068 inline ResultImpl *Result::get()
00069 {
00070 if(_impl) return _impl;
00071 return getEmpty();
00072 }
00073
00074 inline const ResultImpl *Result::get() const
00075 {
00076 if(_impl) return _impl;
00077 return getEmpty();
00078 }
00079
00080 inline ResultImpl *Result::operator->()
00081 {
00082 return get();
00083 }
00084
00085 inline const ResultImpl *Result::operator->() const
00086 {
00087 return get();
00088 }
00089
00090 inline Result &Result::operator=(const Result &o)
00091 {
00092 if(o._impl != _impl) {
00093 if(_impl) _impl->decrementRefCount();
00094 _impl = o._impl;
00095 if(_impl) _impl->incrementRefCount();
00096 }
00097 return *this;
00098 }
00099
00100 #endif