package nginx.clojure;
import static nginx.clojure.MiniConstants.DEFAULT_ENCODING;
import static nginx.clojure.MiniConstants.NGX_HTTP_CLOJURE_STR_LEN_OFFSET;
import static nginx.clojure.NginxClojureRT.fetchNGXInt;
import static nginx.clojure.NginxClojureRT.fetchNGXString;
import static nginx.clojure.NginxClojureRT.pushNGXString;
public class NgxStringHeaderHolder extends AbstractHeaderHolder {
public NgxStringHeaderHolder() {
}
public NgxStringHeaderHolder(String name, long offset, long headersOffset) {
super(name, offset, headersOffset);
}
@Override
public void push(long h, long pool, Object v) {
pushNGXString(h + offset, pickString(v), DEFAULT_ENCODING, pool);
}
@Override
public void clear(long h) {
pushNGXString(h + offset, null, DEFAULT_ENCODING, 0);
}
@Override
public Object fetch(long h) {
return fetchNGXString(h + offset, DEFAULT_ENCODING);
}
@Override
public boolean exists(long h) {
if (h == 0){
return false;
}
long lenAddr = h + NGX_HTTP_CLOJURE_STR_LEN_OFFSET;
int len = fetchNGXInt(lenAddr);
if (len <= 0){
return false;
}
return true;
}
}