/ .. / / -> download

#include "XdmItem.h"

XdmItem::XdmItem(): XdmValue(){
	value = NULL;
}

    XdmItem::XdmItem(const XdmItem &other): XdmValue(other){
	value = (sxnc_value *)malloc(sizeof(sxnc_value));
        value->xdmvalue = other.value->xdmvalue;
	xdmSize =1;
	refCount = other.refCount;
    }


XdmItem::XdmItem(jobject obj){
	value = (sxnc_value *)malloc(sizeof(sxnc_value));
        value->xdmvalue = obj;
	xdmSize =1;
	refCount =1;
}

bool XdmItem::isAtomic(){
	return false;
}




   XdmItem * XdmItem::getHead(){ return this;}

  XdmItem * XdmItem::itemAt(int n){
	if (n < 0 || n >= size()) {
		return NULL;	
	}
	return this;
  }



 int XdmItem::size(){
	return 1;	
   }

jobject XdmItem::getUnderlyingValue(){
#ifdef DEBUG
	std::cerr<<std::endl<<"XdmItem-getUnderlyingValue:"<<std::endl; 
#endif 
	if(value == NULL) {
		return NULL;	
	}
	return value->xdmvalue;
}

    const char * XdmItem::getStringValue(){
        if(stringValue.empty()) {
    		jclass xdmItemClass = lookForClass(SaxonProcessor::sxn_environ->env, "net/sf/saxon/s9api/XdmItem");
    		jmethodID sbmID = (jmethodID) SaxonProcessor::sxn_environ->env->GetMethodID(xdmItemClass,
    					"getStringValue",
    					"()Ljava/lang/String;");
    		if (!sbmID) {
    			std::cerr << "Error: Saxonc." << "getStringValue"
    				<< " not found\n" << std::endl;
    			return NULL;
    		} else {
    			jstring result = (jstring)(SaxonProcessor::sxn_environ->env->CallObjectMethod(value->xdmvalue, sbmID));
    			if(result) {
    					const char * str = SaxonProcessor::sxn_environ->env->GetStringUTFChars(result, NULL);
    					stringValue = std::string(str);
                        return stringValue.c_str();
    			}
    			return NULL;
    		}
    	} else {
    		return stringValue.c_str();
    	}
   }

	/**
	* Get the type of the object
	*/
	XDM_TYPE XdmItem::getType(){
		return XDM_ITEM;
	}


/ gopher://khzae.net/0/s1000d/s1kd-tools/src/tools/s1kd-brexcheck/saxon/Saxon.C.API/XdmItem.cpp
Styles: Light Dark Classic