/* This file is part of the db4o object database http://www.db4o.com
Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com
db4o is free software; you can redistribute it and/or modify it under
the terms of version 3 of the GNU General Public License as published
by the Free Software Foundation.
db4o is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/. */
package com.db4o;
import com.db4o.ext.*;
import com.db4o.internal.*;
import com.db4o.internal.marshall.*;
import com.db4o.marshall.*;
/**
* @exclude
*/
public final class Debug4 {
/**
* indexes all fields
*/
public static final boolean indexAllFields = false;
/**
* prints query graph information to the console
*/
public static final boolean queries = false;
/**
* allows faking the Db4oDatabase identity object, so the first
* stored object in the debugger is the actually persisted object
*
* Changing this setting to true will fail some tests that expect
* database files to have identity
*/
public static final boolean staticIdentity = queries;
/**
* prints more stack traces
*/
public static final boolean atHome = false;
/**
* makes C/S timeouts longer, so C/S does not time out in the debugger
*/
public static final boolean longTimeOuts = false;
/**
* turns freespace debuggin on
*/
public static final boolean freespace = Deploy.debug;
/**
* fills deleted slots with 'X' and overrides any configured
* freespace filler
*/
public static final boolean xbytes = freespace;
/**
* checks monitor conditions to make sure only the thread
* with the global monitor is allowed entry to the core
*/
public static final boolean checkSychronization = false;
/**
* makes sure a configuration entry is generated for each persistent
* class
*/
public static final boolean configureAllClasses = false;
/**
* makes sure a configuration entry is generated for each persistent
* field
*/
public static final boolean configureAllFields = false;
/**
* allows turning weak references off
*/
public static final boolean weakReferences = true;
/**
* prints all communicated messages to the console
*/
public static final boolean messages = false;
/**
* allows turning NIO off on Java
*/
public static final boolean nio = true;
/**
* allows overriding the file locking mechanism to turn it off
*/
public static final boolean lockFile = true;
public static void expect(boolean cond){
if(! cond){
throw new RuntimeException("Should never happen");
}
}
public static void ensureLock(Object obj) {
if (atHome) {
try {
obj.wait(1);
} catch (IllegalMonitorStateException imse) {
System.err.println("No Lock Alarm.");
imse.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static boolean exceedsMaximumBlockSize(int a_length) {
if (a_length > Const4.MAXIMUM_BLOCK_SIZE) {
if (atHome) {
System.err.println("Maximum block size exceeded!!!");
new Exception().printStackTrace();
}
return true;
}
return false;
}
public static boolean exceedsMaximumArrayEntries(int a_entries, boolean a_primitive){
if (a_entries > (a_primitive ? Const4.MAXIMUM_ARRAY_ENTRIES_PRIMITIVE : Const4.MAXIMUM_ARRAY_ENTRIES)) {
if (atHome) {
System.err.println("Maximum array elements exceeded!!!");
new Exception().printStackTrace();
}
return true;
}
return false;
}
public static final void readBegin(ReadBuffer buffer, byte identifier) {
if (Deploy.debug) {
if (Deploy.brackets) {
if (buffer.readByte() != Const4.YAPBEGIN) {
throw new Db4oException("Debug.readBegin() YAPBEGIN expected.");
}
}
if (Deploy.identifiers) {
byte readB = buffer.readByte();
if (readB != identifier) {
throw new Db4oException("Debug.readBegin() wrong identifier: "+(char)readB);
}
}
}
}
public static final void readEnd(ReadBuffer buffer) {
if (Deploy.debug && Deploy.brackets) {
if (buffer.readByte() != Const4.YAPEND) {
throw new RuntimeException("Debug.readEnd() YAPEND expected");
}
}
}
public static final void writeBegin(WriteBuffer buffer, byte identifier) {
if (Deploy.debug) {
if(buffer instanceof MarshallingContext){
ByteArrayBuffer prepend = new ByteArrayBuffer(2);
if (Deploy.brackets) {
prepend.writeByte(Const4.YAPBEGIN);
}
if (Deploy.identifiers) {
prepend.writeByte(identifier);
}
((MarshallingContext)buffer).debugPrependNextWrite(prepend);
return;
}
if (Deploy.brackets) {
buffer.writeByte(Const4.YAPBEGIN);
}
if (Deploy.identifiers) {
buffer.writeByte(identifier);
}
}
}
public static final void writeEnd(WriteBuffer buffer) {
if (Deploy.debug && Deploy.brackets) {
if(buffer instanceof MarshallingContext){
((MarshallingContext)buffer).debugWriteEnd(Const4.YAPEND);
return;
}
buffer.writeByte(Const4.YAPEND);
}
}
private Debug4() {
}
}